1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[MySQL]任意の順番で連番を割り振る

Posted at

並び替えるためのデータを個別に持たせたとき、任意の順番で連番を振るのに少し悩んだ。
あまり効率的ではない部分があるかも(逆順で書かせてるところとか)。

SQL文

SET
@cnt_i:=0;

UPDATE
sample
SET
pos = (@cnt_i := @cnt_i + 1)
ORDER BY
FIELD(id, ...) DESC
,id;

解説

ORDER BY
FIELD(id, ...) DESC

FIELD()の第一引数に並び順を指定するカラムを指定し、
第二引数以降に、任意の順番を逆順で指定する。

FIELD(id,8,6,2) DESC

例えばidを2,6,8の順番で並び替えたい場合は、このように指定する。

ORDER BY
-- FIELD(id, ...) DESC
,id;

idが指定されていないカラムについては、idの昇順で並び替える。

id pos
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9

このようなsampleテーブルがあるとする。
posは並び順データを格納するカラム。

このsampleテーブルに対して以下のSQLを実行すると…

SET
@cnt_i:=0;

UPDATE
sample
SET
pos = (@cnt_i := @cnt_i + 1)
ORDER BY
FIELD(id,8,6,2) DESC
,id;
id pos
2 1
6 2
8 3
1 4
3 5
4 6
5 7
7 8
9 9

このように並び順が格納される。
2→6→8と任意の順番で連番が割り振られる。
順番を指定していないカラムは、id昇順を基準として続く連番が割り振られる。

1
0
0

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?