我有一个订单查询
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 排序。
这可以做到吗?谢谢
我有一个订单查询
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 table_name
ORDER BY
IF(status < 2, status, 3),
IF(status = 2, TO_DAYS(end_date) * -1, TO_DAYS(end_date))
完善德瓦特的答案...
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
使用 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 上选择并对其进行排序,但我补充说,以防您想要不同的排序顺序。