我想从字段field1中找出含有三个关键词key1,key2,key3的记录,使用了如下语句:
select * from table1 where (field1 like 'key1') or (field1 like 'key2') or (field1 like 'key3') 结果中有些记录三个条件都成立,也就是含有三个关键词,有些含有两个,当然有些只有一个。我的问题是如何根据含有的关键词数量排序呢,有些类似于google的搜索。也就是含有三个关键词的排前些,含两个关键词的紧接,最后才是含一个关键词的记录??多谢各位!

解决方案 »

  1.   

    select *
    from table1 
    where (field1 like '%key1%') or (field1 like '%key2%') or (field1 like '%key3%') 
    order by SIGN(INSTR(field1, 'key1'))+SIGN(INSTR(field1, 'key2'))+SIGN(INSTR(field1, 'key3'))
    == 思想重于技巧 ==
      

  2.   

    select * from `table`     
    where title like '%美食%' or title like '%成都%' or title like '%好吃%'        
    order by  
    (  
    (case when title like '%美食%' then 1 else 0 end)+  
    (case when title like '%成都%' then 1 else 0 end)+  
    (case when title like '%好吃%' then 1 else 0 end)  
    )  
    desc  
    ;  
    /* 对关键词匹配的个数越多,排在越前 */
      

  3.   

    select *
    from table1 
    where (field1 like '%key1%') or (field1 like '%key2%') or (field1 like '%key3%') 
    order by SIGN(INSTR(field1, 'key1'))+SIGN(INSTR(field1, 'key2'))+SIGN(INSTR(field1, 'key3')) desc只好在贴一遍那位删除 , 请出来解释一下!!
    == 思想重于技巧 ==