1. 假设在表table1中查询标题title含有Str1,Str2,Str3的纪录
select * from table1 where instr(title,'Str1') and instr(title,'Str2') and instr(title,'Str3')2.
select * from table1 where instr(context,'Str1') or instr(context,'Str2') or instr(context,'Str3')
select * from table1 where instr(title,'Str1') and instr(title,'Str2') and instr(title,'Str3')2.
select * from table1 where instr(context,'Str1') or instr(context,'Str2') or instr(context,'Str3')
http://www.csdn.net/expert/topic/997/997314.xml?temp=.1359674
SELECT * FROM A WHERE CONTEXT IN ("%STR1%","%STR2%","%STR3%")但上面是语句是错误的,有没有类似上句的?请啊。
对英文有效!
我一般对这种情况就要看需求,如果搜索量大的就加上搜索缓存,加快第二次搜索的速度。如果搜索量少就不管了.
=============================================
我的方法是针对一个表(里面有N多个记录)的搜索的。如果需要搜索多个表,可以适当根据需要改变一下方法。
思路如下:
建立一个缓存表,记录
1:搜索环境,如关键字,搜索条件、范围等
2:搜索结果,如搜索出来符合条件的记录ID。
3:过期时间,我一般定义搜索过期时间是当前搜索时间开始过后的一个星期。
4:其他信息,比如搜索次数,搜索ID等。使用方法:
用户搜索的时候首先搜索符合搜索环境(如关键字、搜索条件、范围)并且在过期时间内的记录,找到符合的条件则直接返回搜索结果的数据而不需要再搜索那个大表。
如果搜索不到符合记录,那么就搜索那个大表,搜索后把搜索结果存入缓存表,并且输出搜索结果,第二次再搜索这个条件的时候就可以直接从缓存表输出搜索了。
在维护方面,当管理员一次更新大量数据后或者相隔一定时间后,应对缓存表进行一次更新。更新将旧的而且搜索次数不多的缓存删除,把搜索次数比较多的记录重新建立一个新缓存,并且把更新这些记录的过期时间。 用这个东西有个缺点,就是对于新的记录,可能会搜索不出来。因为很可能在建立搜索缓存的时候还没有那个新的记录,导致这个记录还没被记录在缓存中,所以必须定时更新缓存。或者设置其他一下手段避免这个问题,比如设置一个更新标志,当标记为真的时候就不使用搜索缓存等...当然这样做的话搜索缓存的作用肯定减少了。=================================================================