如果有如下数据:;
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以实现目标?谢谢你花时间。
lymnna711#
FIELD 将分配 NULL 任何不匹配的 id ,默认情况下,在mysql中,空值优先排序。如果你根本不想看到不匹配的项目,你可以添加一个 WHERE 条款:
FIELD
NULL
id
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;
q43xntqr2#
使用 COALESCE 功能:
COALESCE
SELECT `cnt_stamp` FROM `stm_events` ORDER BY COALESCE(`id`,FIELD(`id`,4,1,2,3));
sql fiddle演示
2条答案
按热度按时间lymnna711#
FIELD
将分配NULL
任何不匹配的id
,默认情况下,在mysql中,空值优先排序。如果你根本不想看到不匹配的项目,你可以添加一个WHERE
条款:如果你想看到你所有的数据,与非匹配
id
值,然后反转字段列表的顺序并按降序排序:演示
q43xntqr2#
使用
COALESCE
功能:sql fiddle演示