首页 > 解决方案 > 如何使用“自定义”排序返回 MySQL 中的记录

问题描述

我正在尝试根据他们在 MySQL 中的 ID 返回记录而不进行排序。

但是当我运行查询时,它会将它们从最低的 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

标签: mysqlsql

解决方案


尝试使用ORDER BY FIELD (id, ...)

SELECT *
FROM events
WHERE id IN (4, 5, 9, 11)
ORDER BY FIELD (id, 11, 4, 9, 5)

演示

至于为什么您当前的查询显示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;

推荐阅读