如何使用“orderbyfield”对sql的结果进行排序

rekjcdws  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(315)

如果有如下数据:;

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

如果输入的顺序是(4,1,2,3),我只想得到(3999,3,9)。为了实现这一点,我创建了一个sql

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

但是它返回(1000,30,3999,3,9)。如何修复sql以实现目标?谢谢你花时间。

lymnna71

lymnna711#

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;

演示

q43xntqr

q43xntqr2#

使用 COALESCE 功能:

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

sql fiddle演示

相关问题