Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie lässt man einen Benutzer irgendwo in eine Liste einfügen?

Die einfachste Methode aus Code-Sicht ist die Verwendung eines verknüpften Listenstils, bei dem Sie eine nächste Element-ID anstelle eines Auftragswerts haben. Dies ist in kleinen Listen weniger nützlich, aber wenn Sie beginnen, die Listengröße zu vergrößern, werden Aktualisierungen/Verschiebungen/Entfernungen viel sauberer und es wird verhindert, dass möglicherweise Tausende von Tupeln aktualisiert werden, um eine Änderung der Reihenfolge vorzunehmen.

++ Ich habe kein genaues Codebeispiel zur Hand, aber Sie würden alle Listen eines Benutzers aufrufen

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;

Dies würde alle Beiträge eines einzelnen Benutzers abrufen, und dann hätten Sie ein Feld, das die ID des nächsten Beitrags enthält. Zu Beginn benötigen Sie einen Schlüssel, um den ersten Beitrag zu identifizieren (speichern Sie die ID des ersten Beitrags in den Benutzerinformationen). Nachdem Sie den ersten Post abgerufen haben, greifen Sie auf dessen „nächsten“ Wert zurück und verwenden diesen, um den nächsten Post zu identifizieren.

Das scheint für eine kurze Liste ein wenig verrückt zu sein, aber denken Sie an einen Benutzer mit 1000 Beiträgen. Wenn sie 1 Beitrag an der 2. Position hinzufügen müssen. In einem traditionellen numerischen Ordnungssystem müssten Sie jetzt 999 andere Zeilen mit einer +1-Aktualisierung aktualisieren. Wenn Sie bei dieser Lösung einen Beitrag an der zweiten Position einfügen müssen, fragen Sie einfach den ersten Beitrag ab, um seinen nächsten Wert zu erhalten. Sobald Sie ihn haben, ändern Sie ihn in den Wert des neuen zweiten Beitrags und setzen den nächsten Wert des zweiten Beitrags auf den Wert, der ursprünglich vom ersten gehalten wurde.

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

Nach dem Einfügen:

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