gpt4 book ai didi

MySQL:保留 UNION 中的选择顺序

转载 作者:可可西里 更新时间:2023-11-01 07:35:39 25 4
gpt4 key购买 nike

我有一张表,其中存储了一些事件的信息。
我想列出这些事件,但我希望首先显示即将发生的事件并按升序排列,而过去的事件按降序显示在下方。

我可能想做这样的事情:

(SELECT * FROM events WHERE date > NOW() ORDER BY date ASC)
UNION
(SELECT * FROM events WHERE date < NOW() ORDER BY date DESC)

我检查了 MySQL 文档,发现 UNION 通常适用于无序的行集,因此对每个 SELECT 进行排序是毫无用处的。 UNION ALL 似乎都无法完成这项工作。

在谷歌搜索了一下之后,我知道如何根据 SELECT 生成的行对行进行排序,但是,我仍然不知道如何以不同的顺序按同一列对它们进行排序。

我想我可以很好地执行两个 SELECT,一个用于即将发生的事件,一个用于过去的事件。但我真的很想知道是否有可能只用一个查询来完成。
您有什么建议吗?

最佳答案

我认为您不需要 UNION为了这。你应该能够写:

SELECT *
FROM events
ORDER
BY CASE WHEN date < NOW() THEN date ELSE NOW() END DESC,
date ASC
;

CASE WHEN date < NOW() THEN date ELSE NOW() END DESC ORDER BY 的一部分确保即将发生的事件首先出现,并确保过去的事件以所需的顺序显示,但不影响即将发生的事件的相对顺序。 date ASC part 是处理该部分的回退标准。

(免责声明:未经测试。)

关于MySQL:保留 UNION 中的选择顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12268745/

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