gpt4 book ai didi

mysql - ORDER BY 两个条件

转载 作者:太空宇宙 更新时间:2023-11-03 12:06:23 26 4
gpt4 key购买 nike

我尝试实现以下目标:我有不同颜色的消息(红色橙色绿色)。现在我想根据以下条件从最近三个我们发布的消息中对我的结果集进行排序:

  • 如果最新的消息是绿色的则应该在最上面
  • 任何其他消息应按以下顺序排序:1. red,2. orange,3. green

这是我目前使用的 SQL。但这不处理最近发布绿色消息的情况:

SELECT ID, color
FROM mod_cc_stream_entry
WHERE DATE_ADD(status_date, INTERVAL 3 HOUR) >= NOW()
ORDER BY FIELD(COALESCE(color, 'green'), 'red', 'orange', 'green')

我可以运行两个语句。首先检查最新消息是否为 green,如果不是,则运行第二条语句以获得我喜欢的顺序(上面的语句)。

但我想知道是否有可能在一个声明中做到这一点。

更新 SQLFiddle

最佳答案

乍一看,您可以尝试类似条件订单的方式

查询:

SELECT ID, color
FROM mod_metanet_cc_stream_entry
JOIN (
SELECT MAX(status_date) as new_status
FROM mod_metanet_cc_stream_entry
) temp
WHERE DATE_ADD(status_date, INTERVAL 3 HOUR) >= NOW()
ORDER BY
CASE
WHEN status_date = new_status AND color = 'green' THEN 1
WHEN color = 'red' THEN 2
WHEN color = 'orange' THEN 3
WHEN color is null THEN 8
ELSE 4
END

虽然我需要一些数据来测试它

输出:

+----+--------+
| ID | COLOR |
+----+--------+
| 20 | red |
| 26 | red |
| 17 | red |
| 23 | red |
| 16 | orange |
| 24 | orange |
| 21 | orange |
| 27 | orange |
| 18 | green |
| 19 | green |
| 22 | NULL |
| 25 | NULL |
+----+--------+

关于mysql - ORDER BY 两个条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26405750/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com