[MySQL] ORDER BYでのNULLの順序

レコードの表示順序を意図的に決めたくて

  • テーブルに”order”という整数型のカラムを追加
  • “order”はNULL可能なカラムでデフォルトはNULL
  • “order”の整数値の小さい順にレコードを表示する
  • “order”がNULLのレコードは整数値の後に来る

しかし実際に試してみると、ORDER BYでレコードをソートする場合、整数値よりもNULLの方が先に来る。そういうものなのかなと思って調べてみるとDB依存っぽい。DBによってはNULLを先にするか後にするかを指定できるらしいが、MySQLではNULLは先に来るように決まっているらしい。

NULLを後に来るようにするにはSQLだと以下のように指定すればよい。

Laravelだと以下のように指定する。

参考サイト

NULLと戯れる: ORDER BYとNULL – Qiita
https://qiita.com/SVC34/items/c23341c79325a0a95979

Laravel EloquentのソートでNULLを最後に持ってくる(MySQL) – ハマログ
https://blog.e2info.co.jp/2017/07/08/laravel_eloquent_sort_mysql_null_last/

php – How to sort NULL values last using Eloquent in Laravel – Stack Overflow
https://stackoverflow.com/questions/17644072/how-to-sort-null-values-last-using-eloquent-in-laravel

OrderByでnullをascの最後尾に置く書き方【62日目】 – エンジニアのひよこ_level10
https://www.nyamucoro.com/entry/2017/12/14/232819