我在 mysql-db 上有一个 ajax 搜索。示例:搜索我查询的“man”:
SELECT id FROM table WHERE name LIKE '%man%;
我现在想对结果进行排序,以使所有结果都按字母顺序从搜索开始:
man
mankind
之后,我希望所有结果都按字母顺序排列搜索 INSIDE,例如:
iron man
woman
我怎样才能做到这一点?
我在 mysql-db 上有一个 ajax 搜索。示例:搜索我查询的“man”:
SELECT id FROM table WHERE name LIKE '%man%;
我现在想对结果进行排序,以使所有结果都按字母顺序从搜索开始:
man
mankind
之后,我希望所有结果都按字母顺序排列搜索 INSIDE,例如:
iron man
woman
我怎样才能做到这一点?
您可以构造您的ORDER BY
usingCASE
语句来验证子字符串。注意:我在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()
下面的答案。
试试这个
SELECT id FROM table WHERE name LIKE 'man%';
UNION
SELECT id FROM table WHERE name LIKE '%man%';