Mysql
 sql >> Database >  >> RDS >> Mysql

Aggiorna un elenco di cose senza colpire ogni voce

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 .