3

我有一个订单查询

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 排序。

这可以做到吗?谢谢

4

3 回答 3

2

试试这个查询 -

SELECT * FROM table_name
  ORDER BY
    IF(status < 2, status, 3),
    IF(status = 2, TO_DAYS(end_date) * -1, TO_DAYS(end_date))
于 2012-09-24T14:05:15.690 回答
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
于 2012-09-26T18:21:09.850 回答
0

使用 2 个查询来获取不同的排序,然后获取查询的 UNION。

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 记录最后,因此从技术上讲,您不需要在 UNION 上选择并对其进行排序,但我补充说,以防您想要不同的排序顺序。

于 2012-09-24T03:35:54.990 回答