通过使用FIELD函数和多列进行MYSQL自定义顺序

时间:2019-05-22 12:52:21

标签: mysql

我有一个名为data的表,该表具有2列typestatus,如下所示:

TYPE        STATUS

deposit     1
deposit     1
deposit     2
deposit     3
deposit     0
transfer    1
transfer    2
transfer    3
transfer    0
transfer    1

我需要通过将status的顺序设置为(1、2、3,然后是0)来对其进行排序,但是当status1时,我需要输入deposit首先是transfer类型,对于其余状态,我只需要将它们设置为(2、3,然后是0),而不必注意类型。

使用此查询,我只能找出一半的难题:

select * from data order by FIELD(status, '1', '2', '3', '0')

结果:

TYPE        STATUS

deposit     1
transfer    1
transfer    1
deposit     1
deposit     2
transfer    2
deposit     3
deposit     3
transfer    0
deposit     0

所需的结果是:

TYPE        STATUS

deposit     1
deposit     1
transfer    1
transfer    1
deposit     2
transfer    2
deposit     3
deposit     3
transfer    0
deposit     0

提前谢谢!

2 个答案:

答案 0 :(得分:1)

你不能只是做

select *
from data
order by field(status, '1', '2', '3', '0'), type

答案 1 :(得分:1)

如果您不希望陷入状态值数量发生变化而必须更新的FIELD表达式中,则可以先按STATUS > 0 DESC进行排序(这将对所有正数进行排序STATUS值之前的0值),然后依次乘STATUS(将正值排序为1、2、3等),然后乘TYPE(自{{ 1}}按字母顺序在deposit之前:

transfer

输出:

SELECT *
FROM data
ORDER BY STATUS > 0 DESC, STATUS, TYPE

Demo on dbfiddle