Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zaktualizuj kolumnę indeksu sortowania, aby przenieść elementy

Powinieneś być w stanie zrobić to w jednym zapytaniu:coś w stylu UPDATE foo SET sort_index = sort_index + 1 WHERE bar_id == b AND sort_index < s1 AND sort_index >= s2 , gdzie b to bar_id wiersza do przeniesienia, s1 jest bieżącym sort_index tego wiersza i s2 to sort_index chcesz go przenieść. Następnie wystarczy zmienić sort_index z rzędu.

Prawdopodobnie chciałbyś wykonać dwa zapytania w ramach transakcji. Ponadto może to przyspieszyć, jeśli utworzysz indeks w sort_index używając czegoś takiego jak CREATE INDEX foo_index ON foo (sort_index) .

(Przy okazji, zakładam, że nie chcesz duplikować sort_index wartości w ramach danego bar_id i że względna kolejność wierszy nigdy nie powinna być zmieniana, chyba że jawnie. Jeśli tego nie potrzebujesz, rozwiązanie jest jeszcze prostsze.)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wykonywać wiele zapytań migracji laravel alter table w jednym?

  2. Czy rozmiar tabeli wpływa na wydajność INSERT?

  3. EEE MMM dd GG:mm:ss ZZZ rrrr format daty do java.sql.Date

  4. mysql REGEXP nie pasuje

  5. Sprawdź, czy baza danych mysql istnieje, wykonaj akcję na podstawie wyniku