@old
と仮定します はリンゴの古い位置の値4であり、@new
新しいポジション1です。
set @old = 4;
set @new = 1;
UPDATE Items
SET `order value` =
CASE `order value` WHEN @old THEN @new
ELSE `order value` + SIGN(@[email protected]) END
WHERE `order value` BETWEEN LEAST(@old, @new) AND GREATEST(@old, @new);
MySQL 5.1.52を使用して、サンプルデータでこれをテストしましたが、機能します。同じSQLは、初期のエントリを後で移動したり、途中で移動したりする必要がある場合にも機能します。@old
の値を設定するだけです。 および@new
。