2008 年 12 月 30 日
MySQLで昇順ソートする時、NULL を最後に持ってくる
はまったのでメモ。
某Webアプリを「スパゲッティPHPスクリプト+SQLite」から「CakePHP+MySQL」の環境に移植作業をしてました。ある情報を一覧表示したときの並び順が、移植元のアプリと違うのでorder句にあれこれ試してみてもうまくいきません。
しょうがないのでGoogle先生に聞いてみた。どうやら、DBMSによってNULLの値が上に来たり下に来たりするとのこと。昇順ソートの場合、SQLiteでは下に来て、MySQL上に来るらしい。こいつが原因だ(つーか常識?)。
上記エントリーを参考にしました。いつもありがとうございます。
答えとしてはorder by 句に ‘IS NULL ‘を入れればOK。具体的なSQL例文は以下のとおり
SELECT * FROM truth_girls ORDER BY priority IS NULL;
CakePHP風には
$order = 'Model.priority IS NULL';
$alldata = $this->Model->findAllByFlag('1', null, $order);
こんな感じでしょうか。