3

イベントを保存するテーブルがあり、日付用のフィールドが 2 つあります。1 つはイベントの開始日 (start_date) 用で、もう 1 つは終了日 (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;

私が必要とするのは、同じ結果を返すが、次の方法に従って異なる方法で順序付けされたクエリです。

  • イベントは、現在のイベントと将来のイベントの 2 つのグループに「分割」されます。現在のイベントは、実際の日付の前日 (「昨日」) に開始され、まだ終了していないすべてのイベントと見なされます。

  • 結果は、最初の将来のイベントを start_time の昇順で表示し、現在のイベントを表示した後、start_time の昇順で表示します。

ありがとう

4

2 に答える 2

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;
于 2012-08-30T03:05:48.727 に答える
0

これを試して:

ORDER BY 
  (CASE WHEN start_time < CURDATE() AND end_time >= CURDATE() THEN 1 ELSE 0 END) ASC,
  start_time ASC
于 2012-08-30T03:04:29.263 に答える