現在、ステートメントで非常に基本的な OrderBy を実行しています。
SELECT * FROM tablename WHERE visible=1 ORDER BY position ASC, id DESC
これの問題は、「位置」の NULL エントリが 0 として扱われることです。したがって、位置が NULL のすべてのエントリは、1、2、3、4 のエントリの前に表示されます。例:
NULL, NULL, NULL, 1, 2, 3, 4
次の順序を実現する方法はありますか?
1, 2, 3, 4, NULL, NULL, NULL.
ベストアンサー1
MySQL には、null を最後にソートする文書化されていない構文があります。列名の前にマイナス記号 (-) を付け、ASC を DESC に切り替えます。
SELECT * FROM tablename WHERE visible=1 ORDER BY -position DESC, id DESC
これは本質的には NULL 値を最後に配置することの逆ですposition DESC
が、それ以外は と同じですposition ASC
。
良い参考資料はここにありますhttp://troels.arvin.dk/db/rdbms#select-order_by