3

注文のあるクエリがあります

ORDER BY FIND_IN_SET(status, '1,5,3,4,2'), end_date ASC

しかし、私が欲しいのは、ステータス1のレコードがend_date ASCで注文され、ステータス2がend_date DESCで注文され、その他のレコードがend_dateASCで注文されることです。

これはできますか?ありがとう

4

3 に答える 3

2

このクエリを試してください-

SELECT * FROM table_name
  ORDER BY
    IF(status < 2, status, 3),
    IF(status = 2, TO_DAYS(end_date) * -1, TO_DAYS(end_date))
于 2012-09-24T14:05:15.690 に答える
1

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
于 2012-09-26T18:21:09.850 に答える
0

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して注文する必要はありませんが、別の並べ替え順序が必要な場合に備えて追加しました。

于 2012-09-24T03:35:54.990 に答える