从包含列events
和start_date
(布尔值)的表ongoing
中选择,我想:
ongoing
排序第一结果(1s前全部为0)。ongoing = 0
对所有非正在进行的事件(start_date ASC
)进行子排序,所有正在进行< / {>事件(ongoing = 1
)start_date DESC
。我可能错过了一些简单的愚蠢(可能使用CASE
?),但我被卡住了!TIA
答案 0 :(得分:2)
只需使用TIMESTAMPDIFF()
计算:
SELECT ...
FROM ...
...
ORDER BY ongoing, IF(ongoing, TIMESTAMPDIFF(NOW(), start_date),
TIMESTAMPDIFF(start_date, NOW()))
注意在2种情况下如何反转参数的顺序。 (我可以让他们自己扭转 - 如果是这样,只需在每次通话中交换它们。)