LoginSignup
1
0

More than 1 year has passed since last update.

MySQLで指定行のみ最初に並び替えて取得

Posted at

MySQLで指定のレコードを先頭にする(任意の順にする)ORDER BYの記述方法。

やりたいこと

こんなテーブルがある。

【テーブル:job_name】

id name
1 細工師
2 作家
3 狩人
4 漁師
5 鋳物師

これをid=4の「漁師」を先頭にして取得したい。

実装その1 CASE文

idが4の場合0に置き換えて、昇順で取得する。もしidが0未満のレコードがあるなら最小値を指定する。
id=4以外のレコードはid順になる。

SELECT name FROM job_name
ORDER BY CASE id WHEN 4 THEN 0 ELSE id END ASC;

実装その2 ORDER BY FIELD

FIELDはMySQL独自の記法。
FIELDで指定したid=4が一番後ろに来る。DESCで逆順にすれば良い。

SELECT name FROM job_name
ORDER BY FIELD(id, 4) DESC;

-- 全行指定する場合はDESCは不要
SELECT name FROM job_name
ORDER BY FIELD(id, 4, 1, 2, 3, 5);

実装その3 idを指定

指定したid=4が一番後ろに来る。DESCで逆順にすれば良い。

SELECT name FROM job_name
ORDER BY id = 4 DESC;

あとがき

  • 実装その2、その3のid:4以外の指定してしない行は順番未指定の状態なので注意。
  • 「idを指定してソート」は多用すると分かりづらいので、書き方を工夫するか、場合によっては「ソート順」のカラムをテーブルに追加するのも検討したい。もしくは取得後にプログラム内で並び替えるのも良いかも。

参考

1
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0