eev*_*vaa 36 mysql sql sql-order-by
我有一个包含单词和输入字段的表,可以使用实时搜索来搜索该表.目前,我使用以下查询来搜索表:
SELECT word FROM words WHERE word LIKE '%searchstring%' ORDER BY word ASC
Run Code Online (Sandbox Code Playgroud)
有没有办法对结果进行排序,以便在单词的开头找到字符串的那些首先出现,而单词出现在单词后面的那些结尾出现?
例如:搜索' hab '当前返回
但我喜欢这样:
或者至少这样:
如果有人能帮我解决这个问题会很棒!
Ed *_*bbs 76
要做到第一种方式(开始单词,在单词的中间,结束单词),尝试这样的事情:
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
Run Code Online (Sandbox Code Playgroud)
要以第二种方式(匹配字符串的位置)执行此操作,请使用以下LOCATE函数:
SELECT word
FROM words
WHERE word LIKE '%searchstring%'
ORDER BY LOCATE('searchstring', word)
Run Code Online (Sandbox Code Playgroud)
您可能还需要一个打破平局,例如,一个以上的单词开头hab.为此,我建议:
SELECT word
FROM words
WHERE word LIKE '%searchstring%'
ORDER BY <whatever>, word
Run Code Online (Sandbox Code Playgroud)
在以多个单词开头的情况下,以...开头hab的单词hab将被分组在一起并按字母顺序排序.
Rob*_*ert 15
试试这种方式:
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
Run Code Online (Sandbox Code Playgroud)
您可以使用该INSTR函数返回单词中搜索字符串的起始位置,
ORDER BY INSTR(word,searchstring)
Run Code Online (Sandbox Code Playgroud)
为了使搜索字符串在两个不同的单词中出现在相同位置时,使结果集更具确定性,请向ORDER BY添加第二个表达式:
ORDER BY INSTR(word,searchstring), word
Run Code Online (Sandbox Code Playgroud)
(例如,搜索字符串hab出现在两个的第二位置chablis和shabby)
| 归档时间: |
|
| 查看次数: |
22570 次 |
| 最近记录: |