根据“最佳匹配”对 MySQL 结果进行排序
在此场景中,目标是增强 MySQL 实时搜索查询以对结果进行优先级排序搜索词在单词中出现较早的位置。
当前,查询对结果进行排序按字母顺序排列:
SELECT word FROM words WHERE word LIKE '%searchstring%' ORDER BY word ASC
为了实现所需的排序,我们可以引入条件逻辑来区分搜索词在结果中的位置。
按开始、中间、单词结尾
要排列单词开头的匹配优先的结果,我们可以使用以下内容查询:
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)
此查询计算搜索词在每个结果中的位置并排序
处理平局
如果多个结果具有相同的分数或位置,我们可以引入辅助排序标准:
SELECT word FROM words WHERE word LIKE '%searchstring%' ORDER BY <whatever>, word
通过替换
以上是如何根据搜索词位置按'最佳匹配”对 MySQL 搜索结果进行排序?的详细内容。更多信息请关注PHP中文网其他相关文章!