MySQL按“订购”;“最佳匹配”;
我有一个包含单词的表和一个使用实时搜索来搜索该表的输入字段。目前,我使用以下查询来搜索表:MySQL按“订购”;“最佳匹配”;,mysql,sql,sql-order-by,Mysql,Sql,Sql Order By,我有一个包含单词的表和一个使用实时搜索来搜索该表的输入字段。目前,我使用以下查询来搜索表: SELECT word FROM words WHERE word LIKE '%searchstring%' ORDER BY word ASC 有没有一种方法可以对结果进行排序,以便在单词开头找到字符串的结果排在第一位,在单词后面出现字符串的结果排在最后 例如:搜索“hab”当前返回 alphabet habit rehab 但我喜欢这样: SELECT word FROM words WHER
SELECT word FROM words WHERE word LIKE '%searchstring%' ORDER BY word ASC
有没有一种方法可以对结果进行排序,以便在单词开头找到字符串的结果排在第一位,在单词后面出现字符串的结果排在最后
例如:搜索“hab”当前返回
SELECT word
FROM words
WHERE word LIKE '%searchstring%'
ORDER BY CASE WHEN word = 'searchstring' THEN 0
WHEN word LIKE 'searchstring%' THEN 1
WHEN word LIKE '%searchstring%' THEN 2
WHEN word LIKE '%searchstring' THEN 3
ELSE 4
END, word ASC
SELECT word
FROM words
WHERE word LIKE '%searchstring%'
ORDER BY CASE WHEN word = 'searchstring' THEN 0
WHEN word LIKE 'searchstring%' THEN 1
WHEN word LIKE '%searchstring%' THEN 2
WHEN word LIKE '%searchstring' THEN 3
ELSE 4
END, word ASC
SELECT word
FROM words
WHERE word LIKE '%searchstring%'
ORDER BY CASE WHEN word = 'searchstring' THEN 0
WHEN word LIKE 'searchstring%' THEN 1
WHEN word LIKE '%searchstring%' THEN 2
WHEN word LIKE '%searchstring' THEN 3
ELSE 4
END, 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
要使用第二种方法(匹配字符串的位置),请使用:
例如,如果有多个单词以hab
开头,您可能还需要一个平局打破者。为此,我建议:
SELECT word
FROM words
WHERE word LIKE '%searchstring%'
ORDER BY <whatever>, word
选择单词
言辞
其中包含“%searchstring%”之类的单词
按顺序
如果有多个以
hab
开头的单词,则以hab
开头的单词将按字母顺序分组和排序。您可以使用INSTR
函数返回单词中搜索字符串的起始位置
ORDER BY INSTR(word,searchstring)
当searchstring以两个不同的单词出现在同一位置时,要使resultset更具确定性,请通过以下方式向顺序中添加第二个表达式:
ORDER BY INSTR(word,searchstring), word
(例如,搜索字符串<代码> HAB <代码>出现在代码< CababiS和
orderby
减慢了泛型中的查询速度。我不知道这个答案中的CASE表达式将如何返回3。满足该条件的单词的任何值都将已经满足前一个条件,并且大小写表达式将返回2。。。也许检查的顺序应该不同?这是一个很好的答案,每个解决方案都有助于了解/学习。我建议在“searchstring”这样的词出现时添加另一个大小写,然后添加0
(没有%
)单独捕获精确匹配的大小写。如果它与searchstring
完全匹配,则如果使用ORDER BY,word
的平分键,它应该自然排序到顶部。示例:搜索so
返回sob、son、soap、socks、so、sop、sow。按大小写排序,当像“searchstring%”这样的词结束时为1,当像“%searchstring”这样的词结束时为3,否则为2,word将使精确匹配(so
)位于顶部。这有意义吗?谢谢,@spencer7593你节省了我的时间,上帝保佑你