sql >> Databáze >  >> RDS >> Mysql

Chcete-li přesunout položky, aktualizujte sloupec indexu řazení

Měli byste to udělat v jediném dotazu:něco ve smyslu UPDATE foo SET sort_index = sort_index + 1 WHERE bar_id == b AND sort_index < s1 AND sort_index >= s2 , kde b je bar_id řádku, který se má přesunout, s1 je aktuální sort_index tohoto řádku a s2 je sort_index chcete přesunout. Pak byste jen změnili sort_index z řady.

Pravděpodobně budete chtít provést dva dotazy v rámci transakce. Také by to mohlo urychlit, pokud byste vytvořili index na sort_index pomocí něčeho jako CREATE INDEX foo_index ON foo (sort_index) .

(Mimochodem, zde předpokládám, že nechcete duplikovat sort_index hodnoty v rámci daného bar_id a že relativní pořadí řádků by se nikdy nemělo měnit jinak než výslovně. Pokud to nepotřebujete, řešení je ještě jednodušší.)




  1. migrace z postgresu na mysql způsobuje podivné chyby Mysql2::Chyba:MySQL server zmizel

  2. Vytvoření formuláře v APEX pro nastavení proměnných v dotazu pro interaktivní sestavu

  3. Jak vyřešit příkaz UPDATE odepřený uživateli v mysql?

  4. Jak volat funkci Oracle s referenčním kurzorem jako mimo parametr z jazyka Visual Basic