Supponiamo @old
è il valore 4 per la vecchia posizione delle mele e @new
è la nuova posizione 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);
Ho usato MySQL 5.1.52 per testarlo sui dati di esempio e funziona. L'identico SQL funziona anche se devi spostare una voce anticipata per essere successiva, o spostarne una nel mezzo, ecc. Basta impostare i valori di @old
e @new
.