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')

解决方案 »

  1.   

    这是我写的一个简单的支持逻辑OR-AND关键字搜索高亮显示搜索结果的代码
    http://www.csdn.net/expert/topic/997/997314.xml?temp=.1359674
      

  2.   

    谢谢,两兄弟的方法我已使用,总觉得此方法查询效率不够,有没有只要一个查询FILTER就达到要求的?如
    SELECT * FROM A WHERE CONTEXT IN ("%STR1%","%STR2%","%STR3%")但上面是语句是错误的,有没有类似上句的?请啊。
      

  3.   

    select I from a where context rlike 'str1|str2|str3';
    对英文有效!
      

  4.   

    目前我也烦恼这种搜索的问题,想了好久都没头绪。建立索引的方法也没有,因为like '%KEYWORD%'的方法是不用索引的。
    我一般对这种情况就要看需求,如果搜索量大的就加上搜索缓存,加快第二次搜索的速度。如果搜索量少就不管了.
      

  5.   

    索引对like 'sss%'还是有效的
      

  6.   

    谢谢binscut兄,我试了一下,也支持中文,但查询速度不够,似乎比多个like还慢一点,并且还要请教如何用rlike实现"与查询".请教pcdreama兄,如何加上搜索缓存?
      

  7.   

    贴之前的东西...
    =============================================
    我的方法是针对一个表(里面有N多个记录)的搜索的。如果需要搜索多个表,可以适当根据需要改变一下方法。
    思路如下:
    建立一个缓存表,记录
    1:搜索环境,如关键字,搜索条件、范围等
    2:搜索结果,如搜索出来符合条件的记录ID。
    3:过期时间,我一般定义搜索过期时间是当前搜索时间开始过后的一个星期。
    4:其他信息,比如搜索次数,搜索ID等。使用方法:
        用户搜索的时候首先搜索符合搜索环境(如关键字、搜索条件、范围)并且在过期时间内的记录,找到符合的条件则直接返回搜索结果的数据而不需要再搜索那个大表。
        如果搜索不到符合记录,那么就搜索那个大表,搜索后把搜索结果存入缓存表,并且输出搜索结果,第二次再搜索这个条件的时候就可以直接从缓存表输出搜索了。
        在维护方面,当管理员一次更新大量数据后或者相隔一定时间后,应对缓存表进行一次更新。更新将旧的而且搜索次数不多的缓存删除,把搜索次数比较多的记录重新建立一个新缓存,并且把更新这些记录的过期时间。    用这个东西有个缺点,就是对于新的记录,可能会搜索不出来。因为很可能在建立搜索缓存的时候还没有那个新的记录,导致这个记录还没被记录在缓存中,所以必须定时更新缓存。或者设置其他一下手段避免这个问题,比如设置一个更新标志,当标记为真的时候就不使用搜索缓存等...当然这样做的话搜索缓存的作用肯定减少了。=================================================================