Eine Buddylist realisieren
In jeder Community-Anwendung gehören Buddylisten zum Standard. Ich stelle Kontakt zu einem anderen User her und dieser bestätigt die Anfrage oder ignoriert sie. Wie man das in MySQL einfach umsetzt, zeige ich in diesem Beitrag.
Man nehme zwei Tabellen:
- users (id, is_active, username)
- friends (request_user_id, response_user_id, status)
Mein Userprofil ist in der Tabelle users hinterlegt. Die Tabelle friends erfaßt meine Kontaktanfragen und deren Status.
Ich kann einerseits request_user_id sein, wenn ich die Kontaktanfrage starte, oder response_user_id, wenn ich eine Kontaktanfrage eines anderen Users beantworten soll.
Der Status kann folgende Werte annehmen:
- 0 = neu|offen
- 1 = bestätigt
- 2 = ignorieren|abgelehnt|zurückgenommen
Ich habe die user_id = 589 und kann meine Buddies nun wie folgt abfragen:
SELECT * FROM ( SELECT request_user_id AS friend_id FROM friends WHERE response_user_id = 589 AND STATUS = 1 UNION SELECT repsonse_user_id AS friend_id FROM friends WHERE request_user_id = 589 AND STATUS = 1 ) AS buddies INNER JOIN users AS u ON u.id = buddies.friend_id WHERE is_active = 1
wir lesen diese Abfrage mal von innen nach aussen:
- Gib mir alle Datensätze, wo ich angefragt habe
- Gib mir alle Datensätze, wo ich angefragt worden bin
- Vereinige beide Mengen und nenne diese Menge “buddies”
Ich bekomme eine Art neue Tabelle mit dem Namen “buddies” und einer Spalte “friend_id”
Der INNER JOIN liefert alle Datensätze, die in beiden Mengen vorhanden sind, sowohl in der users-Tabelle als auch in der buddies Menge.
Ich hoffe, ich konnte das einigermaßen rüberbringen. Auf Wiedersehen!
No related posts.
Wow, super Tutorial.
Vielen Dank, war sehr hilfreich und nützlich für mich
Gruß
Georg