我正在对一个数据库进行查询,该数据库在每个记录中存储一个很长的单词。没有空格,没有特殊字符,只有ualpha。现在我使用LIKE关键字来查找包含输入中所有单词的记录。我希望脚本首先向我展示具有最高相关性的结果。
因此,例如,如果"我输入"是我。此脚本应首先返回包含所有这些单词的记录,如下所示:
" XSF的 BE NSU的 ME POPKL 如果"
然后它会显示那些只包含其中两个单词的内容,然后是那些只包含其中一个单词的内容。
我尝试使用" ORDER BY CASE"并指出最佳匹配,如下所示:
- ORDER BY CASE
- WHEN `code` LIKE '%word1%' AND `code` LIKE '%word2%' THEN 1
- WHEN `code` LIKE '%word1%' THEN 2
- ELSE 3 END;
虽然有效但是当服务器超过三个字时,服务器崩溃了,因为它必须浏览几乎 400万的记录而根本无法处理它。
之后我尝试了全文搜索,但它不允许我搜索部分单词,只搜索前缀。
有没有办法实现我想要的目标?
答案 0 :(得分:0)
我建议添加值。 MySQL将布尔值视为整数,因此您可以这样做:
order by ((code like '%word1%') +
(code like '%word2%') +
(code like '%word3%')
) desc
编辑:
当然,这应该在where
条款之后:
where code like '%word1%' or code like '%word2%' or code like '%word3%'