Mysql 按顺序对记录进行排序;未来ASC,过去描述
我想对记录进行如下排序:Mysql 按顺序对记录进行排序;未来ASC,过去描述,mysql,sql,Mysql,Sql,我想对记录进行如下排序: 未来/现在事件ASC 过去事件描述 所以先是今天,然后是明天,直到没有更多的未来记录。 然后我想展示过去的事件,但首先是最新的事件 到目前为止,我已经找到了第一点的解决方案: ORDER BY ( CASE WHEN ev.StartDate < CURDATE() THEN 1 ELSE 0 END) ASC, ev.StartDate ASC orderby( ev.StartDate
ORDER BY (
CASE WHEN ev.StartDate < CURDATE()
THEN 1
ELSE 0
END) ASC, ev.StartDate ASC
orderby(
ev.StartDate
但是这个查询的问题是所有帖子都是按ASC排序的,包括过去的帖子(需要是DESC)
在
案例中如何将其组合?您需要一个稍微复杂一点的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
CASE WHEN (CURDATE() > ev.StartDate)
THEN datediff(CURDATE(),ev.StartDate ) --Past, older date bigger differ
ELSE datediff(ev.StartDate , CURDATE()+100) END --Future, differ from a more futrue date
第一个命令在过去之前排列未来,第二个命令未来ASC,第三个命令过去DESC
(第二个和第三个可以互换)
orderby
(日期
我有同样的要求,找到了另一种方法
ORDER BY (CURDATE()>ev.StartDate) ASC, ABS(DATEDIFF(CURDATE(),ev.StartDate))
您可以使用日期差并与-1相乘来更改过去/现在的顺序。谢谢!我已经应用并修补了所选代码,但如果有机会/需要,将重新讨论此问题。
ORDER BY
(date < CURDATE()) ASC,
(greatest(date, CURDATE()) ASC,
(least(date, CURDATE()) DESC
ORDER BY (CURDATE()>ev.StartDate) ASC, ABS(DATEDIFF(CURDATE(),ev.StartDate))