请问如何实现这个功能,模糊搜索一个句子,匹配得单词越多的越靠前?????这个帐号只有11分了,本问题能解决100分 肯定补齐。

解决方案 »

  1.   

    匹配得单词越多的越靠前这个如何理解?'hello oh my god test'
    'test oh my god test oh my god'
    'oh my test sd god'
    'hi my god test'
    建议能列点例子说明。
      

  2.   

    用replace把单词替换成'',然后取原来和替换后的长度差,差的越多,匹配的就越多select table.*,(length(col)-length(replace(col,'ss','')) as ord from table order by ord
    类似这样的sql
      

  3.   

    ACMAIN_CHM:  其实我的意思很简单,在一个字段里如果我要查询的三个单词都包含的话,不管顺序,那肯定关联性越强,就应该排在最前面。其次包含两个单词的关联性差一点,就排在后面。只包含一个单词的就排最后。
    这就好比baidu搜索一样,你搜索出来结果肯定是关联性越强的排在越前面。yangxiao_jiang:您的方法让人耳目一新,确实是个解决办法。我有两个疑问:(1)replace(replace(col,'ss',''),'yy','')这样使用不知道有没有语法错误?
    (2)replace的时候如何能做到大小写不敏感,比如我要替换God,数据库里找到god也能替换掉?
      

  4.   

    用replace把单词替换成'',然后取原来和替换后的长度差,差的越多,匹配的就越多 
    (length(col)-length(replace(col,'ss',''))/LENGTH('ss')一般就是用REPLACE来取得的,在MYSQL下
    replace(replace(col,'ss',''),'yy','')
    语法是正确的replace的时候如何能做到大小写不敏感,比如我要替换God,数据库里找到god也能替换掉?
    转换成大写 OR 小写
    UPPER、LOWER
    replace(LOEWR(replace(LOWER(col),'ss','')),'yy','')
      

  5.   

    (length(col)-length(replace(col,'ss',''))/LENGTH('ss') :即SS出现的次数
    select * from tt order by
    (length(col)-length(replace(col,'ss',''))/LENGTH('ss')