sql >> Database >  >> RDS >> Mysql

Een sorteerindexkolom bijwerken om items te verplaatsen

Je zou dit in een enkele query moeten kunnen doen:iets in de trant van UPDATE foo SET sort_index = sort_index + 1 WHERE bar_id == b AND sort_index < s1 AND sort_index >= s2 , waarbij b is de bar_id van de te verplaatsen rij, s1 is de huidige sort_index van die rij, en s2 is de sort_index waarnaar u het wilt verplaatsen. Dan verander je gewoon de sort_index van de rij.

U wilt waarschijnlijk de twee query's binnen een transactie uitvoeren. Het kan ook de zaken versnellen als u een index maakt op de sort_index met iets als CREATE INDEX foo_index ON foo (sort_index) .

(Trouwens, hier ga ik ervan uit dat je geen dubbele sort_index wilt hebben waarden binnen een gegeven bar_id , en dat de relatieve volgorde van rijen nooit mag worden gewijzigd, behalve expliciet. Als je dit niet nodig hebt, is de oplossing nog eenvoudiger.)




  1. Conversie mislukt bij het converteren van de varchar-waarde in case-statement

  2. SQL-query om verschillende waarden van alle kolomwaarden in een tabel te krijgen

  3. Uitvoering van mySQL-query in jQuery.Post-methode

  4. Hoe de mysql-schermconsole in Windows te wissen?