2009-12-17, 09:15
  #1
Medlem
Jag skriver ut meddelanden från en SQL-databas mha av PHP. Tabellen ("meddelanden") med meddelandena har en kolumn som vi kan kalla "ordning". Det meddelande som ska skrivas ut först har värdet "1", nästa värde som ska skrivas ut har värdet "2" osv. Dessa behöver dock inte stå i rätt ordning i databasen.

Jag sorterar denna kolumn i samband med att jag hämtar den från databasen. På så sätt kan jag skriva ut meddelandena i rätt ordning.

Nu till problemet:
Säg att jag har fem stycken meddelanden med ordningen 1-5. Jag lägger nu till ett nytt meddelande som ska ha ordningen 2. Jag måste därför öka värdet på "ordning" på de meddelanden som hade värdet 2 eller högre.

Hur gör jag detta på bästa sätt?
Citera
2009-12-17, 09:51
  #2
Medlem
gadzooxs avatar
Två queries i en transaktion?
Kod:
UPDATE tabell SET SortOrder = SortOrder + 1 WHERE SortOrder >= 2
INSERT INTO tabell(..., SortOrder) VALUES(..., 2)
Eller kanske hellre en trigger för INSERT till tabellen som kollar insertat värde och gör motsvarande UPDATE?


Sen får du fundera på hur du gör för att flytta en post, dvs vid UPDATE av SortOrder. Bör väl inte bli några större skillnader; kolla om det finns en post med det värde du uppdaterar till, i så fall kör ovan UPDATE-query för att "peta upp" allt ett hack. Borde vara lämpligt att göra med en trigger. Posterna kanske inte behöver ligga i nummerföljd, det räcker väl med att de ligger i rätt ordning efter en ORDER BY (dvs 1, 5, 18, 416, 417 är ok)? Har du ett krav på att de skall ligga i nummerföljd kan du alltid bygga någon finurlig query som fixar det i efterhand (typ UPDATE ... FROM ... med nån liten funktion som även returnerar radnummer).
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in