MySQL多订单集

MySQL多订单集,mysql,Mysql,我有一个订单查询 ORDER BY FIND_IN_SET(status, '1,5,3,4,2'), end_date ASC 但是我想要的是任何状态为1的记录都是按end_date ASC排序的,任何状态为2的记录都是按end_date DESC排序的,其他记录都是按end_date ASC排序的 这能做到吗?谢谢使用两个查询获得不同的排序,然后获得查询的并集 SELECT * FROM ( (SELECT * FROM table WHERE status!=2 ORDER BY F

我有一个订单查询

ORDER BY FIND_IN_SET(status, '1,5,3,4,2'), end_date ASC
但是我想要的是任何状态为1的记录都是按end_date ASC排序的,任何状态为2的记录都是按end_date DESC排序的,其他记录都是按end_date ASC排序的


这能做到吗?谢谢

使用两个查询获得不同的排序,然后获得查询的并集

SELECT * FROM (
(SELECT * FROM table WHERE status!=2 
 ORDER BY FIND_IN_SET(status, '1,5,3,4'), end_date ASC)
UNION
(SELECT * FROM table WHERE status=2 ORDER BY end_date DESC)
) AS table_sort ORDER BY FIND_IN_SET(status, '1,5,3,4,2')
由于您希望状态2记录在最后,从技术上讲,您不需要在联合上选择并对其排序,但我添加了这一点,以防您需要不同的排序顺序。

尝试此查询-

SELECT * FROM table_name
  ORDER BY
    IF(status < 2, status, 3),
    IF(status = 2, TO_DAYS(end_date) * -1, TO_DAYS(end_date))
从表名称中选择*
订购人
如果(状态<2,状态,3),
如果(状态=2,截止日期)*-1,截止日期)

精炼德瓦特的答案

SELECT * FROM table_name
  ORDER BY find_in_set(status, '1,5,3,4,2')
  CASE
    WHEN (status = 2) then TO_DAYS(end_date) * -1
    ELSE TO_DAYS(end_date)
  END

我很快就会试一试。以前我有两个单独的查询,但我添加了分页,所以需要将它们作为单个查询字符串。谢谢