首页 > 解决方案 > 如何使用“ORDER BY FIELD”对 SQL 的结果进行排序

问题描述

如果有如下所示的数据;

id  cnt_stamp    
1  999 
2  3
3  9
4  3 
5  1000
6  30

如果输入按此顺序是 (4, 1, 2, 3),我只想得到 (3, 999, 3, 9)。为此,我创建了一个 SQL

SELECT `cnt_stamp`
FROM `stm_events`
ORDER BY FIELD(`id`, 4, 1, 2, 3);

但它会返回 (1000, 30, 3, 999, 3, 9) 。我应该如何修复我的 SQL 以实现我的目标?感谢您抽出宝贵的时间。

标签: mysqlsqlsql-order-byfield

解决方案


FIELD默认情况下,将分配NULL给任何不匹配id的,并且空值在 MySQL 中首先排序。如果您根本不想看到不匹配的项目,您可以添加一个WHERE子句:

SELECT cnt_stamp
FROM stm_events
WHERE id IN (1, 2, 3, 4)
ORDER BY FIELD(id, 4, 1, 2, 3);

如果您想查看所有数据,id最后有不匹配的值,则反转字段列表的顺序并降序排序:

SELECT cnt_stamp
FROM stm_events
ORDER BY FIELD(id, 3, 2, 1, 4) DESC;

演示


推荐阅读