sql >> Database >  >> RDS >> Mysql

Hoe kan ik een gebruiker overal in een lijst laten invoegen?

De eenvoudigste methode vanuit een codestandpunt is om een ​​gekoppelde lijststijl te gebruiken, waarbij je een volgend element-ID hebt, in plaats van een bestelwaarde. Dit is minder handig in kleine lijsten, maar wanneer u de lijst begint te vergroten, maakt het updates/verplaatsingen/verwijderingen veel schoner en voorkomt het mogelijk duizenden tupels bij te werken om 1 orderwijziging door te voeren.

++ Ik heb geen exact codevoorbeeld bij de hand, maar je zou bellen voor alle lijsten van een gebruiker

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;

Dit zou alle berichten van een enkele gebruiker krijgen, en dan zou je een veld hebben dat de id van het volgende bericht bevat. Om te beginnen heb je een sleutel nodig om de eerste post te identificeren (sla de id van de eerste post op in de gebruikersinfo). Nadat je de eerste post hebt opgehaald, pak je de 'volgende' waarde en gebruik die om de volgende post te identificeren.

Dit lijkt een beetje gek voor een korte lijst, maar denk aan een gebruiker met 1000 berichten. Als ze 1 post op de 2e positie moeten toevoegen. In een traditioneel numeriek bestelsysteem zou u nu 999 andere rijen moeten bijwerken met een +1-update. Met deze oplossing, als je een bericht op de tweede positie moet invoegen, vraag je eenvoudig het eerste bericht om de volgende waarde te krijgen. Als je het eenmaal hebt, verander je het in de waarde van het nieuwe tweede bericht en stel je de volgende waarde van het tweede bericht in op de waarde die oorspronkelijk door de eerste werd gehouden.

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

Na invoegen:

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



  1. Hoe CDC op een reeks tabellen uit te schakelen OF op alle tabellen in een database in SQL Server uit te schakelen - SQL Server-zelfstudie

  2. Is er een MySQL-equivalent van PHP's preg_replace?

  3. CHAR() of VARCHAR() als primaire sleutel in een ISAM MySQL-tabel?

  4. MYSQL if statement vraag