sql >> Database teknologi >  >> RDS >> Mysql

Hvordan lader man en bruger indsætte hvor som helst på en liste?

Den enkleste metode fra et kodesynspunkt er at bruge en linket-liste-stil, hvor du har et næste element-id, snarere end en ordreværdi. Dette er mindre nyttigt i små lister, men når du begynder at udvide listestørrelsen, gør det opdateringer/flytninger/fjernelser meget renere og forhindrer muligvis i at opdatere tusindvis af tupler for at foretage 1 ordreændring.

++ Jeg har ikke et eksakt kodeeksempel ved hånden, men du ville ringe til alle listen over en bruger

SELECT Posts.id, Posts.next, Posts.content, User.firstPost FROM db.posts AS Posts 
JOIN db.user as User ON Posts.ownerid = User.id 
WHERE User.id='123' AND Posts.active = 1;

Dette ville få alle indlæg fra en enkelt bruger, og så ville du have et felt, der indeholder id'et for det næste indlæg. For at starte skal du bruge en nøgle til at identificere det første indlæg (gem id'et for det første indlæg i brugerens info). Når du har trukket det første indlæg, griber du dens 'næste' værdi og bruger den til at identificere det næste indlæg.

Dette virker lidt skørt for en kort liste, men tænk på en bruger med 1000 indlæg. Hvis de skal tilføje 1 post i 2. position. I et traditionelt numerisk bestillingssystem skal du nu opdatere 999 andre rækker med en +1 opdatering. Med denne løsning, hvis du har brug for at indsætte et indlæg i den anden position, forespørger du blot det første indlæg for at få dets næste værdi. Når du har det, ændrer du det til at være værdien af ​​det nye andet indlæg, og indstiller det andet indlægs næste værdi til at være det, der oprindeligt blev holdt af det første.

[1st Post] --Next---> [2nd Post] --Next---> [3rd Post]

Efter Indsæt:

[1st Post] -.                          .--> [2nd Post] --Next---> [3rd Post]
            `--Next--> [New 2nd Post]--`



  1. MySQL-forespørgsel i Inno Setup

  2. Sådan opretter du ikke null-begrænsning på kolonne i SQL Server-tabel - SQL Server / T-SQL vejledning del 51

  3. SQL Server INFORMATION_SCHEMA visninger | Se om der findes en tabel

  4. Sådan migrerer jeg mine tabeller fra min asp.net-kerneapp på linux