指定した順番でソートしたい
例えば以下のようなステータスがあったとします。
- 合格
- 採点中
- 不合格
studentsテーブルで、A組の生徒を以下の順番で絞り込みたい場合
合格(20)>採点中(10)>不合格の順(30,40,50)
const.phpでは以下のように定義されてするとします。
'scoreStatus' => [ 10 => '採点中', 20 => '合格', 30 => '不合格(カンニング)', 40 => '不合格(未提出)', 50 => '不合格', ],
SQL文
SELECT * FROM students where class_id=100 ORDER BY CASE status WHEN 20 THEN '1' WHEN 10 THEN '2' ELSE '99' END \G;
orderByRaw メソッドで、CASEを使用し優先度を指定(ORDER BY CASE)してあげればOKです。
こうすることでstudentsテーブルのstatusカラムが20は1番目、statusカラムが10は2番目に表示。
それ以外(statusカラムが30,40,50)は最後の方に表示することができます。
Laravel
Laravelでは以下のように書きます。
$students = Student::orderByRaw("CASE status
WHEN 20 THEN '1'
WHEN 10 THEN '2'
ELSE '99' END")
->get();