MYSQL根据条件排序
场景:
现在有一张表TABLE,包含两个字段(假设为):STATUS(状态),CREATE_TIME(数据创建时间)
STATUS有 A、B、C三种状态。
要求:
1.STATUS为A时,创建时间为升序排列
2.STATUS为B或C时,创建时间为降序排列
3.STATUS中A状态优先排列,B和C状态根据创建时间降序排列
解答:
SELECT
t.*
FROM
`TABLE` t
WHERE
1 = 1
ORDER BY
IF
( t.`STATUS` = 'A', 0, 1 ),
IF
( t.`STATUS` = 'A', t.CREATE_TIME, '' ) ASC,
IF
( t.`STATUS` <> 'A', t.CREATE_TIME, '' ) DESC;
说明:
IF ( t.`STATUS` = 'A', t.CREATE_TIME, '' ) ASC:若t.`STATUS`= 'A' 那么 t.CREATE_TIME就为升序排列。
IF ( t.`STATUS` <> 'A', t.CREATE_TIME, '' ) DESC:C:若t.`STATUS`<> 'A' (表示STATUS的状态不为A,也可以表示为: t.`STATUS` != 'A' ) 那么 t.CREATE_TIME就为降序排列。
IF ( t.`STATUS` = 'A', 0, 1 ) :这是一级排序,会将 t.`STATUS`= 'A' 结果当成0,其他的就是1,那么 t.`STATUS`= 'A' 的就排在最前面了。