我有一张已下订单的表。它们带有时间戳。有些订单还被标记为优先订单。
非优先订单按照先进先出原则填写 - 最旧的订单先填写,较新的订单排在队列后面。
但是,可以有优先顺序。它们有一个简单的 bool 值“1”来标记为优先级。但问题是,它们是相反的——新的优先级顺序推回旧的优先级顺序。因此,这些时间戳按 DESC 排序,而不是升序。
我基本上需要一个像这样工作的选择:(我知道这是无效的,我试图展示我想要实现的目标)
SELECT *
FROM table
ORDER BY priority DESC,
(if priority = 1 order by timestamp DESC else order by timestamp)
我尝试合并两个选择,但它们失去了排序。我尝试了 (SELECT) UNION (SELECT) ORDER BY 但我需要以不同的方式排序两个不同的选择。
缺少进行两个单独的选择 - 这可能吗?我想不通。
最佳答案
也许这样的东西会起作用
SELECT *
FROM tab ORDER BY
(CASE WHEN
(priority = 1) THEN
'timestamp DESC'
ELSE
'timestamp'
END), priority DESC ;
在这里查看演示 fiddle http://sqlfiddle.com/#!2/3ce7f/3
关于mysql - 在一个表上进行单个 mysql 选择,但对一列进行 ASC 和 DESC 两次排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21814605/