mysql - 如何使用“自定义”排序返回 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
解决方案
尝试使用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;
推荐阅读
- typescript - Mongoose 和 Typescript 模型需求函数
- time-complexity - 通过位长度确定程序的执行时间?
- python - 如何使用 Selenium 按类定位剑道按钮
- javascript - 为数字而不是字符串工作的对象的顺序数组
- amazon-web-services - 无效资源和格式错误的策略错误 - aws cloudformation YAML
- kubernetes - K8s getting error after change gcloud sdk location on Macos
- javascript - 如何在html文件中使用函数调用
- javascript - 如何计算不同日期的 24 小时格式的两个时间之间的差异?
- c - 如何找到正确的括号顺序?
- css - 在 iFrame 中的内容上应用 CSS