Supposons @old
est la valeur 4 pour l'ancienne position des pommes, et @new
est la nouvelle position 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);
J'ai utilisé MySQL 5.1.52 pour tester cela sur vos exemples de données et cela fonctionne. Le SQL identique fonctionne également si vous devez déplacer une entrée précoce vers plus tard, ou en déplacer une au milieu, etc. Définissez simplement les valeurs de @old
et @new
.