Hello, World!!

むずかしいことはかけません

指定した順番でソートしたい

例えば以下のようなステータスがあったとします。
- 合格
- 採点中
- 不合格

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();

参考サイト

Laravel で アイテムをゲットするときに指定した順番でソートしたい|conocode