0

検索結果を 2 列で並べ替えることに問題があります。

次の形式のテーブルがあります

id  pos date
------------------
65  0   2012-08-10
66  0   2012-08-09
70  0   2012-08-08
73  0   2012-08-07
74  0   2012-08-06
75  0   2012-08-05
76  1   2012-08-04
77  2   2012-08-03
78  0   2012-08-02
79  0   2012-08-01

私の問題は、システム (cms) がNULLに対して (int)0 を生成することです。だから私は結果を得られません、私は必要です。

pos(if not (int)0 and than date) で注文したいので、pos は>=1の場合にのみ位置を強制し ます。私の質問です。ORDER 句で IF ステートメントを使用する方法はありますか?

4

1 に答える 1

4

設定されているかどうかに応じて並べ替えpos、最後に並べ替えられた日付をすべてゼロのままにします。4E9は、のすべての値よりも十分に大きい数値ですpos

SELECT * FROM MyTable 
ORDER BY CASE pos WHEN 0 THEN 4E9 ELSE pos END, `date`;

SQLfiddle でのデモ。

「魔法の定数」を取り除くもう1つの少し単純なmysql固有のバージョンはこれです。

SELECT * FROM MyTable 
ORDER BY pos=0, pos, `date`;

別のSQLfiddle

于 2012-08-26T11:41:52.887 に答える