MySQL order by quot;best matchquot;(MySQL按“最佳匹配排序)
问题描述
我有一个包含单词的表格和一个输入字段,可以使用实时搜索来搜索该表格.目前,我使用以下查询来搜索表:
I have a table that contains words and an input field to search that table using a live search. Currently, I use the following query to search the table:
SELECT word FROM words WHERE word LIKE '%searchstring%' ORDER BY word ASC
有没有办法对结果进行排序,以便在单词开头找到字符串的那些放在最前面,而在单词中出现在后面的那些放在最后?
Is there a way to order the results so that the ones where the string is found at the beginning of the word come first and those where the string appears later in the word come last?
示例:搜索hab"当前返回
- 一个字母表
- h 升技
- r ehab
- a lphabet
- h abit
- r ehab
但我喜欢这样:
- hab 它(首先是因为 'hab' 是开始)
- alp hab et(第二个是因为'hab'在单词中间)
- re hab(最后是因为hab"在词尾)
- hab it (first because 'hab' is the beginning)
- alp hab et (second because 'hab' is in the middle of the word)
- re hab (last because 'hab' is at the end of the word)
或者至少是这样:
- hab 它(首先是因为 'hab' 是开始)
- re hab(第二个是因为 'hab' 从第三个字母开始)
- alp hab et(最后,因为 'hab' 最晚开始,在第四个字母处)
- hab it (first because 'hab' is the beginning)
- re hab (second because 'hab' starts at the third letter)
- alp hab et (last because 'hab' starts latest, at the fourth letter)
如果有人能帮我解决这个问题就好了!
Would be great if anyone could help me out with this!
推荐答案
按照第一种方式(开始单词,在单词中间,结束单词),尝试这样的事情:
To do it the first way (starts word, in the middle of the word, ends word), try something like this:
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
要使用第二种方式(匹配字符串的位置),请使用 LOCATE 函数:
To do it the second way (position of the matched string), use the LOCATE function:
SELECT word
FROM words
WHERE word LIKE '%searchstring%'
ORDER BY LOCATE('searchstring', word)
您可能还需要一个决胜局,例如,多个单词以 hab 开头.为此,我建议:
You may also want a tie-breaker in case, for example, more than one word starts with hab. To do that, I'd suggest:
SELECT word
FROM words
WHERE word LIKE '%searchstring%'
ORDER BY <whatever>, word
如果有多个以hab开头的词,以hab开头的词会组合在一起,并按字母顺序排序.
In the case of multiple words starting with hab, the words starting with hab will be grouped together and sorted alphabetically.
这篇关于MySQL按“最佳匹配"排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:MySQL按“最佳匹配"排序
基础教程推荐
- while 在触发器内循环以遍历 sql 中表的所有列 2022-01-01
- 带有WHERE子句的LAG()函数 2022-01-01
- 从字符串 TSQL 中获取数字 2021-01-01
- ORA-01830:日期格式图片在转换整个输入字符串之前结束/选择日期查询的总和 2021-01-01
- MySQL根据从其他列分组的值,对两列之间的值进行求和 2022-01-01
- 如何在 CakePHP 3 中实现 INSERT ON DUPLICATE KEY UPDATE aka upsert? 2021-01-01
- 带更新的 sqlite CTE 2022-01-01
- CHECKSUM 和 CHECKSUM_AGG:算法是什么? 2021-01-01
- MySQL 5.7参照时间戳生成日期列 2022-01-01
- 使用 VBS 和注册表来确定安装了哪个版本和 32 位 2021-01-01
