我有一个包含名为title的列的表。
以字符串的形式从用户获取输入。该字符串实际上是由空格分隔的一组关键字。
我想在整个表中搜索记录,其标题字段包含用户输入的字符串中存在的一些关键字,结果需要按匹配顺序显示。
对于Ex:
RecordA -> title -> "apple mango grapes banana"
RecordB -> title -> "apple lemon orange"
RecordC -> title -> "banana"
RecordD -> title -> "lemon mango grapes"
假设用户输入的字符串是:“apple mango orange” 然后我想按顺序从php页面得到结果
Record A // 2 matches
Record B // 2 matches
Record D // 1 match
Record C // 0 match
建议我在php中执行此操作的有效方法..
注意:数据库在Mysql中。无法修改它以将全文搜索索引添加到表中。
答案 0 :(得分:1)
最好的方法是全文搜索(参见here)。这个是正确的方式来做你想做的事情,到目前为止效率最高。
在没有全文搜索的情况下你可以做的是这样的:
select t.*
from table t
where title like '%word1%' or
title like '%word2%' or
. . .
order by ((title like '%word1%') +
(title like '%word2%') +
. . .
) desc;
您必须解析用户提供的单词以获取每个单词。另请注意,您的单词边界有问题。如上所述,即使在一个单词中,也会发现任何字母串的出现。如果这是一个问题,那么使用正则表达式而不是like
。但是,真正的解决方案是全文搜索。