Kleiner Denkfehler in einem social Network
Hallo ihr Administratoren da draußen ;)
Ich bin gerade dabei, ein Netzwerk auf die Beine zu stellen. Bis jetzt kann man sich schon Nachrichten und Freundschaftsanfragen problemlos austauschen. Schicke ich eine Freundschaftsanfrage, dann wird in einer Datenbank [Freundschaftsanfragen] ein neuer Datensatz angelegt, in dem der Sender und der Empfänger enthalten sind. Bestätigt der Empfänger nun die Anfrage, dann wird der Datensatz in dieser Tabelle gelöscht und in der Datenbank [Freundesliste] wird ein neuer Datensatz angelegt, der die einzelnen Userbeziehungen enthält.
Also beispielsweise:
ID Von Zu
1 User 1 User 2
Wenn User 1 sich jetzt einloggt, muss logischerweise User 2 als Freund angezeigt werden. Anderseits wenn User 2 sich einloggt, muss User 1 als Freund angezeigt werden. Wie lässt sich diese SQL Abfrage verallgemeinern?
Mit freundlichen Grüßen
Ich bin gerade dabei, ein Netzwerk auf die Beine zu stellen. Bis jetzt kann man sich schon Nachrichten und Freundschaftsanfragen problemlos austauschen. Schicke ich eine Freundschaftsanfrage, dann wird in einer Datenbank [Freundschaftsanfragen] ein neuer Datensatz angelegt, in dem der Sender und der Empfänger enthalten sind. Bestätigt der Empfänger nun die Anfrage, dann wird der Datensatz in dieser Tabelle gelöscht und in der Datenbank [Freundesliste] wird ein neuer Datensatz angelegt, der die einzelnen Userbeziehungen enthält.
Also beispielsweise:
ID Von Zu
1 User 1 User 2
Wenn User 1 sich jetzt einloggt, muss logischerweise User 2 als Freund angezeigt werden. Anderseits wenn User 2 sich einloggt, muss User 1 als Freund angezeigt werden. Wie lässt sich diese SQL Abfrage verallgemeinern?
Mit freundlichen Grüßen
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 319510
Url: https://administrator.de/forum/kleiner-denkfehler-in-einem-social-network-319510.html
Ausgedruckt am: 07.04.2025 um 12:04 Uhr
2 Kommentare
Neuester Kommentar
Grundsätzlich löst du dein Problem so:
Auch wenn ich dein Ziel "Soziales Netzwerk" für sehr hoch gesteckt halte noch zwei Dinge:
SELECT IF(Von = @User, Zu, Von) FROM Freunde WHERE Von = @User OR Zu = @User
Auch wenn ich dein Ziel "Soziales Netzwerk" für sehr hoch gesteckt halte noch zwei Dinge:
- Die Daten gehören meines Erachtens nicht in eine andere DB, der Anwendungskontext ist identisch.
- Du könntest das ganze per Stored Function behandeln, aber das nur auf Datenbank-Ebene zu machen wird teuer. Ich würde die Daten für die Anwendung bei der ersten Verwendung per aus der Datenbank holen, mittels Memcache o.ä. zwischenspeichern und den Zugriff aus der Anwendung heraus dann auf den Cache routen. Natürlich muss im Cache noch ein expiry timeout rein, damit die Daten immer mal wieder neu geholt werden und wenn die Daten geändert werden muss natürlich der Cache auch gleich aktualisiert werden.