# 背景
とあるアプリの使い方(以降ヘルプと呼ぶ)をDBで管理しており、「カテゴリIDの昇順」かつ「オーダーNoの昇順」で表示されていました。
機能が拡張されれば、もちろんヘルプの記事数は増え、カテゴリ数も増えていきます。
カテゴリには「その他」が存在し、カテゴリIDが「14」で設定されていました。
+---------+-------------+-----------------------------------+----------+ | help_id | category_id | text |order_no | +---------+-------------+-----------------------------------+----------+ | 1 | 1 | xxxxxxxx | 1 | | 2 | 1 | xxxxxxxx | 2 | | 3 | 1 | xxxxxxxx | 3 | | 4 | 2 | xxxxxxxx | 1 | | 5 | 3 | xxxxxxxx | 1 | | 6 | 3 | xxxxxxxx | 2 | ... | 99 | 14 | xxxxxxxx | 1 | | 100 | 14 | xxxxxxxx | 2 | | 101 | 14 | xxxxxxxx | 3 | +---------+-------------+-----------------------------------+----------+ ・category_id = 1 → 登録方法 ・category_id = 2 → ログイン方法 ・category_id = 3 → 課金方法 ... ・category_id = 14 → その他
さてこの状態で新しいカテゴリを追加する必要が出てきました。
当然、カテゴリID「15」で新しいカテゴリが登録されます。
するとヘルプページの並び順は、↓↓↓↓↓↓のようになります。
1. 登録方法 2. ログイン方法 3. 課金方法 ... 14. その他 15. 新しいカテゴリ
その他が一番最後に表示されず、ちょっとダサいですよね・・・
そもそも、「その他に14なんてID降るなよ」ってやった人に言いたいですけど、やってしまった事は仕方がないです。
IDの降りなおしも検討しましたが、今回はSQLのorder byでカテゴリID「14」のものを強制的に最後にしました。
# 解決策
# SQL SELECT * FROM help ORDER BY category_id = 14 asc, order_no asc; # Laravel Help::orderByRaw('category_id = 14 asc')->orderBy('order_no', 'asc')->get(); 1. 登録方法 2. ログイン方法 3. 課金方法 ... 15. 新しいカテゴリ 14. その他
画面にNoを表示する場合は、ソートしてください。