Mysql
 sql >> Base de données >  >> RDS >> Mysql

Mettez à jour une liste de choses sans frapper chaque entrée

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 .