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

Opdater en sorteringsindekskolonne for at flytte elementer

Du burde være i stand til at gøre dette i en enkelt forespørgsel:noget i stil med UPDATE foo SET sort_index = sort_index + 1 WHERE bar_id == b AND sort_index < s1 AND sort_index >= s2 , hvor b er bar_id af rækken, der skal flyttes, s1 er den aktuelle sort_index af denne række og s2 er sort_index du vil flytte den til. Derefter skal du bare ændre sort_index af rækken.

Du vil sikkert gerne lave de to forespørgsler i en transaktion. Det kan også fremskynde tingene, hvis du oprettede et indeks på sort_index ved at bruge noget som CREATE INDEX foo_index ON foo (sort_index) .

(Forresten, her går jeg ud fra, at du ikke vil have duplikat sort_index værdier inden for en given bar_id , og at den relative rækkefølge af rækker aldrig bør ændres undtagen eksplicit. Hvis du ikke har brug for dette, er løsningen endnu enklere.)




  1. Indsæt python binært strengobjekt i MySQL blob

  2. SQL Server 2008:Bulk Datatype Ændring

  3. Sådan hentes den sidste autoinkrementerede værdi i MS-Access som @@Identity i SQL Server

  4. Valg af alle tilsvarende felter med MAX og GROUP BY