多字段查询排序问题想做一个搜索,例如:输入关键字A B C三个关键字中间以空格分开。
我用 select * from table where cn like'%A%' or cn like'%B%' or cn like'%C%' 这种方法查询,
但有个问题。就是如何像百度那样把更符合条件的排在前面呢?例如符合ABC的排在最前,符合AB或BC、AC的排在随后呢?还有一种情况,A,B,C分别为各个字段,同样的需要按照满足3个字段的条件相关度来排序,应该怎么写sql语句。希望大家帮帮忙。

解决方案 »

  1.   

    select * from table where cn like'%A%' or cn like'%B%' or cn like'%C%' 
    order by (cn like'%A%') + (cn like'%B%') + (cn like'%C%' ) desc
      

  2.   

    多谢,还是第一次看到这样的用法。
    我修改成这样,就可以按照需要的关键字排序了。
    select * from table where cn like'%A%' or cn like'%B%' or cn like'%C%'  
    order by (cn like'%A%') + (cn like'%B%') + (cn like'%C%' ) desc,
    (cn like'%A%') + (cn like'%B%') desc,
    (cn like'%B%') + (cn like'%C%' ) desc,
    (cn like'%A%') + (cn like'%C%' ) desc,
    (cn like'%A%') desc,
    (cn like'%B%') desc,
    (cn like'%C%' ) desc1.A,B,C均有。
    2.只有两个时,A+B>B+C>A+C;
    3.只有一个时,A>B>C.但不知道还有好点的方法没?
      

  3.   

    也可以用INSTR(),INSTR(CN,'A')INSTR(CN,'B')+...
      

  4.   

    INSTR()返回的是位置,这个排序恐怕不行吧。
      

  5.   

    if(INSTR(CN,'A')>0,1,0)+if(INSTR(CN,'b')>0,1,0)+...