mysql - 如何返回 MySQL 中 "custom"排序的记录

标签 mysql sql

我试图在不排序的情况下根据 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/

相关文章:

sql - 显示指向同一个表的两个 id 字段的两个链接值

sql - 在另一个CTE中调用一个CTE

php - MySQL 日期查询不起作用

mysql - 基于条件的SQL查询

PHP URL 问题

mysql - MySQL 中的过滤行效率

mysql - 如何漂亮地打印 Hive 输出

MySQL 在 PERL 中对 VARCHAR 选择计数

php - 一个语句中有多个之间

php mysql使用join检索多个数据仅显示最后一行结果