单个mysql在一个表上选择,但是对ASC和DESC两次排序?

时间:2014-02-16 17:15:42

标签: mysql sorting

我有一张已下订单的表格。它们有时间戳。有些订单也被标记为优先订单。

非优先订单填充FIFO - 最早填写的订单首先填写,新订单填写到该行的后面。

但是,可以有优先顺序。这些都有一个简单的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,但我需要两种不同的选择排序。

没有做两次单独的选择 - 这可能吗?我无法弄明白。

2 个答案:

答案 0 :(得分:0)

可能这样的事情会起作用

SELECT * 
FROM tab ORDER BY    
(CASE WHEN 
 (priority = 1) THEN
        'timestamp DESC'
    ELSE
        'timestamp'
    END), priority DESC ;

在此处查看演示小提琴http://sqlfiddle.com/#!2/3ce7f/3

答案 1 :(得分:0)

SELECT * FROM orders 
ORDER BY 
CASE WHEN priority = 1 THEN 'timestamp DESC' ELSE 'timestamp ASC' END