【概要】
カラム「position」の値の順に表示させているデータに対し任意のレコードの表示位置を変更する。

【例】
五十音順に表示させるためにpositionの値を使って制御している環境下において
「田中→高野→高橋」の順番になっているのを「高野→高橋→田中」の順に変更する

row_id name position
1 斉藤 1
2 田中 2
3 高野 3
4 高橋 4
5 渡辺 5



row_id name position
1 斉藤 1
2 田中 4
3 高野 2
4 高橋 3
5 渡辺 5 SET
@row_id = 2 # 対象レコードのid
,@current_position = 2 # 現在の表示位置
,@new_position = 4 # 変更後の表示位置
;

UPDATE
`table`
SET
`position` = CASE
WHEN
@current_position > @new_position
THEN
CASE
WHEN
`position` >= @new_position AND `position` < @current_position
THEN
`position` + 1
WHEN
`row_id` = @row_id
THEN
@new_position
ELSE
`position`
END
WHEN
@current_position < @new_position
THEN
CASE
WHEN
`position` > @current_position AND `position` <= @new_position
THEN
`position` - 1
WHEN
`row_id` = @row_id
THEN
@new_position
ELSE
`position`
END
ELSE
`position`
END
;