+----+--------+ | id | name | +----+--------+ | 1 | Daniel | | 2 | NULL | | 3 | Bob | | 4 | Alice | | 5 | Carol | +----+--------+単に ORDER BY key_col ASC とするとNULLが先頭にくる。
mysql> SELECT * FROM roster ORDER BY name ASC; +----+--------+ | id | name | +----+--------+ | 2 | NULL | | 4 | Alice | | 3 | Bob | | 5 | Carol | | 1 | Daniel | +----+--------+NULLを最後にもってきたい場合は次のように書く。
mysql> SELECT * FROM roster ORDER BY name IS NULL ASC, name ASC; +----+--------+ | id | name | +----+--------+ | 4 | Alice | | 3 | Bob | | 5 | Carol | | 1 | Daniel | | 2 | NULL | +----+--------+key_col IS NULL ASC でNULLが最後になるのでそのあと key_col ASC で昇順にソートする。
ORACLE とかだと下記のように簡単に
ORDER BY comment ASC NULL LAST
NULLS FIRST
NULL 値を順序の最初にするソートを行なう
NULLS LAST
NULL 値を順序の最後にするソートを行なう
このorderをZend使って
$select->order(new Zend_Db_Expr('case when MyDate is null then 1 else 0 end, MyDate'));
○参考
Zend Framework order by ascending null values last
[MySQL] 昇順ソートでNULLを最後にする方法
MySQLでNULLを含む列をORDER BYしたときの挙動
MySQL のソート時に NULL を最後にしたい場合
MySQL で NULL を一番最後にして昇順にソートする