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

Freund eines Freundes in PHP/MySQL?

Die Antwort ist, dass sie keine Auswahlen an einer Freundestabelle vornehmen, sondern höchstwahrscheinlich eine denormalisierte News-Event-Tabelle verwenden. Wir haben einen News-Feed ähnlich wie Facebook auf DoInk.com implementiert, so haben wir es gemacht:

Es gibt den Begriff eines "NewsEvent", es hat einen Typ, einen Initiator (eine Benutzer-ID) und einen Zielbenutzer (ebenfalls eine Benutzer-ID). (Sie können auch zusätzliche Spalten für andere für die Veranstaltung relevante Eigenschaften haben oder sich ihnen anschließen)

Wenn ein Benutzer etwas auf der Pinnwand eines anderen Benutzers postet, generieren wir ein Ereignis wie dieses:

INSERT INTO events VALUES (wall_post_event, user1, user1)

Wenn Sie das Profil von Benutzer1 anzeigen, würden Sie für alle Ereignisse auswählen, bei denen Benutzer1 entweder der Initiator oder das Ziel ist. So zeigen Sie den Profil-Feed an. (Sie können je nach Datenschutzmodell ausgefallene Ereignisse herausfiltern. Aus Leistungsgründen können Sie dies im Arbeitsspeicher tun.)

Beispiel:

SELECT * FROM events WHERE initiator = user1 or target = user1 //to see their profile feed

SELECT * FROM events WHERE initiator IN (your set of friend ids) //to see your newsfeed

Wenn Sie den Newsfeed für alle Ereignisse in Bezug auf Ihre Freunde sehen möchten, können Sie eine Abfrage durchführen, die alle Ereignisse auswählt, bei denen der Initiator in Ihrem Freundeskreis ist.

Vermeiden Sie Implementierungen mit Unterauswahlen, da diese je nach Komplexität nicht skalieren.