レコードの表示順序を意図的に決めたくて
- テーブルに”order”という整数型のカラムを追加
- “order”はNULL可能なカラムでデフォルトはNULL
- “order”の整数値の小さい順にレコードを表示する
- “order”がNULLのレコードは整数値の後に来る
しかし実際に試してみると、ORDER BYでレコードをソートする場合、整数値よりもNULLの方が先に来る。そういうものなのかなと思って調べてみるとDB依存っぽい。DBによってはNULLを先にするか後にするかを指定できるらしいが、MySQLではNULLは先に来るように決まっているらしい。
NULLを後に来るようにするにはSQLだと以下のように指定すればよい。
1 |
ORDER BY `order` IS NULL ASC, `order` ASC; |
Laravelだと以下のように指定する。
1 2 |
->orderByRaw('`order` IS NULL ASC') ->orderBy('order') |
参考サイト
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