2012-08-30 14 views
3

我在哪裏存放事件的表,它有日期2場。一個用於事件的開始日期(start_date),另一個用於結束日期(end_date)。 有些事件沒有end_date定義或有end_date ='1970-01-01'。查詢訂購時間事件首先顯示未來事件和展後時事

我用下面的MySQL查詢中檢索當前和未來的事件。

SELECT * 
FROM events 
WHERE start_time >= CURDATE() 
    OR (start_time <= CURDATE() AND end_time>=CURDATE()) 
ORDER BY events.start_time; 

什麼,我需要的是返回相同的結果,但以不同的方式排列,並按照下列方式查詢:

  • 事件在兩組「分」:在時事和未來事件。當前事件被認爲是在實際日期('昨天')前一天開始的所有事件,但仍未完成。

  • 結果將首先顯示未來事件,下令START_TIME上升,之後顯示時事,由START_TIME有序上升。

感謝

+0

你不需要'START_TIME <= CURDATE()和' - 這是不言而喻的基於布爾之前呢?所以不需要再次對數據庫進行檢查。 – Ariel

回答

2
SELECT *, 
     DATEDIFF(start_time, CURDATE()) AS diff 
FROM events 
WHERE start_time >= CURDATE() 
     OR (start_time <= CURDATE() 
      AND end_time >= CURDATE()) 
ORDER BY CASE 
      WHEN diff > 0 THEN 0 
      ELSE 1 
      end, 
      diff ASC; 
+0

它seemd要解決!(:我會做一些測試,如果一切OK,我會接受answer.many THX –

+0

大答案謝謝 – tlaverdure

0

試試這個:

ORDER BY 
    (CASE WHEN start_time < CURDATE() AND end_time >= CURDATE() THEN 1 ELSE 0 END) ASC, 
    start_time ASC 
+0

此溶液中以同樣的方式排序結果 –