我在mysql-db上有一个ajax-search。示例:搜索我查询的“man”:
SELECT id FROM table WHERE name LIKE '%man%;
我现在想要对结果进行排序,以便按字母顺序从搜索开始所有结果:
man
mankind
之后我想让所有结果按字母顺序宽度搜索INSIDE,如:
iron man
woman
我该怎么做?
答案 0 :(得分:6)
您可以按字符串中搜索字词的位置排序:
SELECT id
FROM table
WHERE name LIKE '%man%'
ORDER BY INSTR(name, 'man'), name
您还可以将表达式更改为仅区分字符串的开头或其他任何位置:
ORDER BY IF(INSTR(name, 'man'), 1, 0)
答案 1 :(得分:2)
您可以使用ORDER BY
语句构建CASE
以验证子字符串。注意:我在这里使用UPPER()
将搜索值和列值转换为大写,用于不区分大小写的匹配。如果您不需要,请移除UPPER()
。
ORDER BY
CASE
/* Matches the start of the string */
WHEN UPPER(LEFT(name, 3)) = 'MAN' THEN 1
/* Doesn't match the end or the start (in the middle) */
WHEN UPPER(RIGHT(name, 3)) <> 'MAN' THEN 2
/* Matches the end of the string */
WHEN UPPER(RIGHT(name, 3)) = 'MAN' THEN 3
ELSE 4
END,
/* Then order by the name column */
name
此方法应该相当便携,但我更喜欢下面的INSTR()
答案。
答案 2 :(得分:1)
试试这个
SELECT id FROM table WHERE name LIKE 'man%';
UNION
SELECT id FROM table WHERE name LIKE '%man%';