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

Mettre à jour une colonne d'index de tri pour déplacer des éléments

Vous devriez pouvoir le faire en une seule requête :quelque chose comme UPDATE foo SET sort_index = sort_index + 1 WHERE bar_id == b AND sort_index < s1 AND sort_index >= s2 , où b est le bar_id de la ligne à déplacer, s1 est le sort_index actuel de cette ligne, et s2 est le sort_index vous voulez le déplacer. Ensuite, il vous suffirait de modifier le sort_index de la ligne.

Vous voudriez probablement faire les deux requêtes à l'intérieur d'une transaction. De plus, cela pourrait accélérer les choses si vous créiez un index sur le sort_index en utilisant quelque chose comme CREATE INDEX foo_index ON foo (sort_index) .

(Au fait, je suppose ici que vous ne voulez pas dupliquer sort_index valeurs dans un bar_id donné , et que l'ordre relatif des lignes ne doit jamais être modifié, sauf explicitement. Si vous n'en avez pas besoin, la solution est encore plus simple.)