yanmai
Goto Top

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 face-smile

Content-Key: 319510

Url: https://administrator.de/contentid/319510

Printed on: April 25, 2024 at 15:04 o'clock

Member: falscher-sperrstatus
falscher-sperrstatus Oct 30, 2016 at 01:47:34 (UTC)
Goto Top
Hi,

kommt immer drauf an, wenn die Freunde dem User zugeordnet sind select * from friends where userID = aktuellerBenutzer; So Pi* Daumen.

VG
Member: atze187
atze187 Oct 30, 2016 updated at 14:59:38 (UTC)
Goto Top
Grundsätzlich löst du dein Problem so:

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:

  1. Die Daten gehören meines Erachtens nicht in eine andere DB, der Anwendungskontext ist identisch.
  2. 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.