Home > MySQL > Eine Buddylist realisieren

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.

Author: Categories: MySQL Tags:
  1. 5. März 2010, 12:51 | #1

    Wow, super Tutorial.
    Vielen Dank, war sehr hilfreich und nützlich für mich :)
    Gruß
    Georg

  1. Bisher keine Trackbacks