Mysqlでnullをorderbyしてみた
id|number| 1 | 1| 2 | 2| 3 |null| 4 | 4| 5 | 5|
これのnumberを昇順(asc)でorderbyしたらどうなるか。
id|number| 3 |null| 1 | 1| 2 | 2| 4 | 4| 5 | 5|
ナンデダヨ。
どうして?
MySQL :: MySQL 5.6 リファレンスマニュアル :: 3.3.4.6 NULL 値の操作
仕様っすか。
どうすればいい?
SQL文
ORDER BY created_at IS NULL ASC, created_at ASC;
Laravel
->orderByRaw('number IS NULL ASC') ->orderBy('number', 'ASC')
なんでうまくいく?
一個目のORDER BY created_at IS NULL ASC
で、NULLとそれ以外がソートされます。
つまり、null
とその他
が分けられますと。IS NULLとASCなので、
(その他 IS NULL)->0
(null IS NULL)->1
になりますよと。
あとは、その他をソートすると
id|number| 1 | 1| 2 | 2| 4 | 4| 5 | 5| 3 |null|
その他がソートされて、nullが一番後ろですよと。
日記
いい感じ。いろいろ学びがあるって素晴らしいね。
bootstrapは明日書こうそうしよう。
てかこっちの記事のほうがadvent calendarに使えたんzy(ry