sql >> Databasteknik >  >> RDS >> Mysql

Vilket är det mest effektiva sättet att lagra en sorteringsordning på en grupp poster i en databas?

Vad sägs om att bara använda ett integer kolumn som definierar ordningen? Som standard tilldelar du nummer * 1000, som 1000, 2000, 3000.... och om du flyttar 3000 mellan 1000 och 2000 ändrar du det till 1500. Så i de flesta fall behöver du inte uppdatera de andra numren alls. Jag använder detta tillvägagångssätt och det fungerar bra. Du kan också använda double men då har du inte kontroll över precisions- och avrundningsfelen, så använd det hellre inte.

Så algoritmen skulle se ut :säg att du flyttar B till position efter A. Utför först välj för att se ordningen på posten bredvid A. Om den är minst +2 högre än ordningen på A så ställer du bara in ordningen på B så att den passar däremellan. Men om det bara är +1 högre (det finns inget mellanslag efter A), väljer du gränsposterna för B för att se hur mycket utrymme som är på den här sidan, dividerar med 2 och lägger sedan till detta värde i ordningen för alla poster mellan A och B. Det är det!

(Observera att du bör använda transaktion/låsning för alla algoritmer som innehåller mer än en enda fråga, så detta gäller även i det här fallet. Det enklaste sättet är att använda InnoDB-transaktionen.)



  1. Docker kan inte ansluta applikationen till MySQL

  2. Hur väljer man alla kolumner i sql utom en kolumn?

  3. beräkna en summa av typtid med sql

  4. Få en exakt exekveringstid för en MySQL-sats