[MySQL, Spanner] 特定のIDだけ並び順を最後にする

2021年3月8日月曜日

MySQL Order By Spanner 並び順

t f B! P L

# 背景

とあるアプリの使い方(以降ヘルプと呼ぶ)を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を表示する場合は、ソートしてください。

注目の投稿

composer.lockはGit管理すべき話

# 背景 # 結論 # composer installとcomposer updateの違い # 背景 仕事では主にLaravelを使用して開発を行っている。 ソースコードはGitでバージョン管理を行い、compose...

プロフィール

7年ほど中小企業でSIerとして働いていました。 現在は個人事業主としてPHP, Javascriptの企業案件をメインに受けています。 最近はポケモンカードの開封にはまっています。

アーカイブ

このブログを検索

QooQ