4

テーブルで並べ替えを行って、ステータスが最初に 3、次にステータスが 4、次に 1 のレコードを表示しています。

現在のテーブルでは、これは出力です

id    status
 1     3
 2     4
 3     4
 4     3
 5     1

今、クエリを適用すると

select * from table order by model.status desc 

出力は次のとおりです。

id    status
 2     4
 3     4
 1     3
 4     3
 5     1

私が実際に欲しいのは以下の出力です。最初にステータス3で、次にステータス4で、次にステータス1で。以下の出力を達成する方法

id    status
 1     3
 4     3
 2     4
 3     4
 5     1
4

7 に答える 7

5

魔法の 9999999 数値の代わりに ~0 を使用できます。これは、big int の可能な最大値を表します... 十分なはずです ;)

order by (case when status = 1 then ~0 else status end) 

マジックナンバーなしの他の解決策

order by status = 1 , status

最初に「ブール値」(DBでは0または1)でソートし、次にステータスでソートします

于 2012-10-07T07:18:56.663 に答える
3

FIELDMySQL で簡単に実行できます。

SELECT * 
FROM model
ORDER BY FIELD(status, 3, 4, 1);

ここで SQLfiddle

于 2012-10-07T07:24:04.830 に答える
3

うまくいかない場合FIELD(おそらく MySql の古いバージョンが原因)、これを試してください。それが動作します

SELECT * FROM model
ORDER BY CASE status WHEN 3 THEN 1  WHEN 4 THEN 2  WHEN 1 THEN 3
END, id

このリンクで動作することを確認してください

于 2012-10-07T07:47:29.020 に答える
1

SQL を使用するFIELD

SELECT * FROM `table` ORDER BY FIELD (status, 3, 4, 1);
于 2012-10-07T07:14:27.037 に答える
1

以下はうまくいくはずです

 ORDER BY  CASE status WHEN 3 THEN 1
                 WHEN 4 THEN 2
                 WHEN 1 THEN 3
                 END, id asc
于 2012-10-07T07:25:52.870 に答える
0

ステータス値が 1、3、および 4 のみの場合は、order by 句で「 FIELD() 」を使用します。

select * from table order by FIELD( model.status 3,4,1)
于 2012-10-07T07:26:11.680 に答える