gpt4 book ai didi

mysql - MySQL 中的条件排序

转载 作者:行者123 更新时间:2023-11-29 01:28:55 25 4
gpt4 key购买 nike

我有一张 session 表,其中包含以下相关领域:

  1. session 名称(文本)
  2. 提交截止日期(日期)
  3. 通知日期(日期)
  4. 事件开始(日期)
  5. 事件结束(日期)

我想查询事件结束时间大于今天的所有 session ,并按如下方式排序:

  1. 首先,通知在未来的所有 session ;按通知日期订购这些。
  2. 然后,通知过去的所有 session ;在事件开始前订购。

我试过:

(SELECT * FROM conferences
WHERE ev_end >= '2014-06-30'
AND notification >= '2014-06-30'
ORDER BY notification ASC)
UNION
(SELECT * FROM conferences
WHERE ev_end >= '2014-06-30'
AND notification < '2014-06-30'
ORDER BY ev_start ASC);

但是不行,顺序不对。事实上,我根本看不出任何排序:当我省略两个 ORDER BY 子句时,结果以完全相同的方式排序(即,看起来是随机的)。

是否可以通过一个 SQL 查询来实现?还是我必须进行两个单独的查询?

我知道这个问题:Conditional sorting in MySQL? ,但我的情况完全不同。

最佳答案

您可以通过将所有逻辑放在 order by 子句中来使用单个查询来完成此操作:

select *
from conferences
where ev_end >= '2014-06-30'
order by (notification >= '2014-06-30') desc,
(case when notification >= '2014-06-30' then notification end) asc,
(case when notification < '2014-06-30' then ev_start end) asc;

请注意,union 明确不保证结果集的顺序。如果您想要以特定顺序排列的结果集,那么您需要在查询的最外层部分使用 order by

关于mysql - MySQL 中的条件排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24489100/

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