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

Aggiorna una colonna dell'indice di ordinamento per spostare gli elementi

Dovresti essere in grado di farlo in una singola query:qualcosa sulla falsariga di UPDATE foo SET sort_index = sort_index + 1 WHERE bar_id == b AND sort_index < s1 AND sort_index >= s2 , dove b è il bar_id della riga da spostare, s1 è l'attuale sort_index di quella riga e s2 è il sort_index in cui vuoi spostarlo. Quindi, dovresti semplicemente cambiare il sort_index della riga.

Probabilmente vorresti eseguire le due query all'interno di una transazione. Inoltre, potrebbe velocizzare le cose se hai creato un indice su sort_index usando qualcosa come CREATE INDEX foo_index ON foo (sort_index) .

(A proposito, qui suppongo che tu non voglia duplicare sort_index valori all'interno di un dato bar_id e che l'ordine relativo delle righe non dovrebbe mai essere modificato se non in modo esplicito. Se non ti serve, la soluzione è ancora più semplice.)