Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Atualizar uma coluna de índice de classificação para mover itens


Você deve ser capaz de fazer isso em uma única consulta:algo como UPDATE foo SET sort_index = sort_index + 1 WHERE bar_id == b AND sort_index < s1 AND sort_index >= s2 , onde b é o bar_id da linha a ser movida, s1 é o sort_index atual dessa linha e s2 é o sort_index você deseja movê-lo. Em seguida, basta alterar o sort_index da fila.

Você provavelmente gostaria de fazer as duas consultas dentro de uma transação. Além disso, pode acelerar as coisas se você criar um índice no sort_index usando algo como CREATE INDEX foo_index ON foo (sort_index) .

(A propósito, aqui estou assumindo que você não quer duplicar sort_index valores dentro de um determinado bar_id , e que a ordem relativa das linhas nunca deve ser alterada, exceto explicitamente. Se você não precisa disso, a solução é ainda mais simples.)