让我们假设我有一个类似以下的查询
$query_search = "SELECT * FROM `search` WHERE `title` LIKE '%$word%' OR `content` LIKE '%$word%'";
我需要按匹配次数排序行吗?
是否有可能在这种数据库结构中,或者我需要重新设计它?
非常感谢
答案 0 :(得分:1)
语法可能有点偏,但是会有类似的工作吗?
ORDER BY
COALESCE(LENGTH(`title`)-LENGTH(REPLACE(`title`,'$word','')),0)+
COALESCE(LENGTH(`content`)-LENGTH(REPLACE(`content`,'$word','')),0)
DESC
字符串中的匹配数可由(LEN(string)-Len(ReplacedString))/Len(Word)
由于Len(Word)
是一个常数,不会影响我在上面遗漏的相对排序。
答案 1 :(得分:0)
ORDER BY (CASE WHEN title REGEXP $word then 1 else 0 end +
CASE WHEN content REGEXP $word then 1 else 0 end) DESC