ORDER BY
次の順序でテーブルからレコードを取得するために日付を使用しようとしています:
TODAY (9 PM)
TODAY (7 PM)
TODAY (9 AM)
TODAY (7 AM)
PAST (3 DAYS AGO)
PAST (2 DAYS AGO)
PAST (1 DAYS AGO)
FUTURE (IN 1 DAY)
FUTURE (IN 2 DAYS)
FUTURE (IN 3 DAYS)
現在私は使用しています:
SELECT *
FROM my_table
ORDER BY
IF(DATE(my_date) = DATE(NOW()), 0, 1) ASC,
IF(DATE(my_date) < DATE(NOW()), 0, 1) ASC,
my_date ASC
しかし、それは私に与えます:
TODAY (7 AM) - WRONG
TODAY (9 AM) - WRONG
TODAY (7 PM) - WRONG
TODAY (9 PM) - WRONG
PAST (3 DAYS AGO)
PAST (2 DAYS AGO)
PAST (1 DAYS AGO)
FUTURE (IN 1 DAY)
FUTURE (IN 2 DAYS)
FUTURE (IN 3 DAYS)
を使用して「今日」の並べ替えを変更してみましたDESC
:
IF(DATE(my_date) = DATE(NOW()), 0, 1) DESC,
しかし、その後、レコードを一番下に送信するだけです (将来の結果の下であっても)。これは SQL だけで可能ですか、それとも CodeIgniter を使用して複数のクエリを実行where()
し、PHP を使用してそれらをマージする必要がありますか?