我正在尝试对我无法弄清楚的 mysql 查询进行一些排序。
id | status | created_at
------------------------
1 | open | 1348778070
2 | closed | 1348711241
3 | open | 1348839204
4 | closed | 1348738073
5 | banned | 1348238422
我如何对上表进行排序,以便“打开”记录按 ASC 顺序排在第一位;然后未打开的记录在 DESC 顺序中排在第二位?换句话说,是否有基于某些条件的动态二级排序方向?
我已经尝试了两个带有排序的 SELECT 查询的 UNION,这不起作用,因为默认情况下 UNION 会产生一组无序的行。
此外,我尝试了一个伪列,它从大量中减去 created_at 时间戳,用于关闭的状态记录,所以我可以按 ASC 排序以获得如下结果...
SELECT table.*, (table.created_at) as tmp_order FROM table
WHERE table.status = 'open'
UNION
SELECT table.*, (999999999 - table.created_at) as tmp_order FROM table
WHERE table.status = 'closed'
ORDER BY tmp_order ASC
这行得通,但我觉得必须有更好的方法。理想情况下,解决方案不包括上述随机大数