注文のあるクエリがあります
ORDER BY FIND_IN_SET(status, '1,5,3,4,2'), end_date ASC
しかし、私が欲しいのは、ステータス1のレコードがend_date ASCで注文され、ステータス2がend_date DESCで注文され、その他のレコードがend_dateASCで注文されることです。
これはできますか?ありがとう
注文のあるクエリがあります
ORDER BY FIND_IN_SET(status, '1,5,3,4,2'), end_date ASC
しかし、私が欲しいのは、ステータス1のレコードがend_date ASCで注文され、ステータス2がend_date DESCで注文され、その他のレコードがend_dateASCで注文されることです。
これはできますか?ありがとう
このクエリを試してください-
SELECT * FROM table_name
ORDER BY
IF(status < 2, status, 3),
IF(status = 2, TO_DAYS(end_date) * -1, TO_DAYS(end_date))
Devartの答えを洗練する...
SELECT * FROM table_name
ORDER BY find_in_set(status, '1,5,3,4,2')
CASE
WHEN (status = 2) then TO_DAYS(end_date) * -1
ELSE TO_DAYS(end_date)
END
2つのクエリを使用してさまざまな種類を取得してから、クエリのUNIONを取得します。
SELECT * FROM (
(SELECT * FROM table WHERE status!=2
ORDER BY FIND_IN_SET(status, '1,5,3,4'), end_date ASC)
UNION
(SELECT * FROM table WHERE status=2 ORDER BY end_date DESC)
) AS table_sort ORDER BY FIND_IN_SET(status, '1,5,3,4,2')
ステータス2のレコードを最後にしたいので、技術的にはUNIONでSELECTして注文する必要はありませんが、別の並べ替え順序が必要な場合に備えて追加しました。