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

标签 mysql sorting

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

非优先订单按照先进先出原则填写 - 最旧的订单先填写,较新的订单排在队列后面。

但是,可以有优先顺序。它们有一个简单的 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/

相关文章:

java - 按大小对 ArrayList 中的集合进行排序

php - 使用变量填充 SQL 数据库的字母数字问题

mysql - 是否需要在 WHERE 子句中使用 INDEX 第二列?

Javascript - 按一个属性分组,按另一个属性排序

c++ - CUDA:在 GPU 上对 vector<vector<int>> 进行排序

python - 如何在Python中为列表的每个元素分配名称

php - 在正确的地方输出查询结果

php - 如何在 php 多维数组中处理来自 mysql 的数据

php - MySQL连接数据库 fatal error

mysql - 基于 mysql 相关性的排名结果