Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Aktualisieren Sie eine Liste von Dingen, ohne jeden Eintrag zu treffen

Angenommen @old ist der Wert 4 für die alte Position von Äpfeln und @new ist die neue 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);

Ich habe MySQL 5.1.52 verwendet, um dies an Ihren Beispieldaten zu testen, und es funktioniert. Das identische SQL funktioniert auch, wenn Sie einen frühen Eintrag nach hinten oder in die Mitte verschieben müssen usw. Legen Sie einfach die Werte von @old fest und @new .