使用实时搜索功能搜索数据库表时,通常希望以优先考虑的方式对结果进行排序。最佳匹配。默认情况下,像所提供的这样的简单查询可能无法根据搜索字符串的起始位置有效地对结果进行排序。
要实现更准确的“最佳匹配”排序,请考虑以下选项:
如果目标是将开头出现的匹配字符串作为最高优先级对结果进行排序,则可以将查询修改为如下所示:
SELECT word FROM words WHERE word LIKE '%searchstring%' ORDER BY CASE WHEN word LIKE 'searchstring%' THEN 1 WHEN word LIKE '%searchstring' THEN 3 ELSE 2 END
这将优先考虑以搜索字符串开头的匹配(分配值 1),然后是包含该字符串的匹配(分配值 3),最后匹配字符串所在的位置发生在任何其他位置(分配值为 2)。
或者,如果目标是要根据匹配字符串在单词中的位置对结果进行排序,查询可以使用 LOCATE 函数:
SELECT word FROM words WHERE word LIKE '%searchstring%' ORDER BY LOCATE('searchstring', word)
此查询将根据搜索字符串第一次出现的索引对结果进行排序
在多个单词同等匹配搜索条件的情况下,可能需要引入平局打破者来进一步细化排序。这可以通过添加额外的 ORDER BY 子句来实现:
SELECT word FROM words WHERE word LIKE '%searchstring%' ORDER BY <whatever>, word
以上是如何按'最佳匹配”对 MySQL 搜索结果进行排序?的详细内容。更多信息请关注PHP中文网其他相关文章!