我想按如下方式对记录进行排序:
- future /现在的事件 ASC
- 过去的事件 DESC
所以先是今天,然后是明天,直到没有更多的 future 记录。 然后我想显示过去的事件,但最新的优先。
到目前为止我已经找到了第一点的解决方案:
ORDER BY (
CASE WHEN ev.StartDate < CURDATE()
THEN 1
ELSE 0
END) ASC, ev.StartDate ASC
但是这个查询的问题是所有帖子都是按 ASC 顺序排列的,包括过去的帖子(需要是 DESC)。
如何在 CASE
中组合它?
最佳答案
您需要稍微复杂一点的order by
:
ORDER BY (ev.StartDate < CURDATE()),
(case when ev.StartDate > CURDATE() then ev.StartDate end) ASC,
(case when ev.StartDate < CURDATE() then ev.StartDate end) DESC
你实际上可以用两个子句来做到这一点:
ORDER BY greatest(ev.StartDate, CURDATE()) DESC,
least(ev.StartDate, CURDATE()) ASC
但我认为第一个版本的意图更清晰。
关于mysql - 记录排序依据; future 的 ASC,过去的 DESC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25892421/