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