我试图在不排序的情况下根据 MySQL 中的 ID 返回记录。
但是当我运行查询时,它会将它们从最低 ID 编号到最高编号排序。
SELECT * FROM events WHERE id=11 or id=4 or id=9 or id=5
结果会像这样:4,5,9,11
如何返回这样的:11,4,9,5
最佳答案
尝试使用ORDER BY FIELD (id, ...)
:
SELECT *
FROM events
WHERE id IN (4, 5, 9, 11)
ORDER BY FIELD (id, 11, 4, 9, 5)
Demo
至于为什么您当前的查询显示 4,5,9,11
顺序,即使您没有使用明确的 ORDER BY
子句,一种解释是id
列是表的聚集主键。在这种情况下,数据实际上将按此顺序存储在磁盘上,并且在选择时,这将是返回的自然顺序。
编辑:
在不支持 FIELD
的其他数据库供应商上,我们可以使用 CASE
表达式进行排序:
SELECT *
FROM events
WHERE id IN (4, 5, 9, 11)
ORDER BY
CASE WHEN id = 11 THEN 1
WHEN id = 4 THEN 2
WHEN id = 9 THEN 3
WHEN id = 5 THEN 4
ELSE 5 END;
关于mysql - 如何返回 MySQL 中 "custom"排序的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53992641/