MySQL ORDER BY条件秒

时间:2015-04-28 18:17:58

标签: mysql

从包含列eventsstart_date(布尔值)的表ongoing中选择,我想:

  1. ongoing排序第一结果(1s前全部为0)。
  2. 然后我想按ongoing = 0对所有非正在进行的事件(start_date ASC)进行子排序,所有正在进行< / {>事件(ongoing = 1start_date DESC。我可能错过了一些简单的愚蠢(可能使用CASE?),但我被卡住了!
  3. TIA

1 个答案:

答案 0 :(得分:2)

只需使用TIMESTAMPDIFF()计算:

SELECT ...
FROM ...
...
ORDER BY ongoing, IF(ongoing, TIMESTAMPDIFF(NOW(), start_date), 
                              TIMESTAMPDIFF(start_date, NOW()))

注意在2种情况下如何反转参数的顺序。 (我可以让他们自己扭转 - 如果是这样,只需在每次通话中交换它们。)