Freundesliste von Benutzer 123:
SELECT u.* FROM users u INNER JOIN friend_requests f ON f.user_id = u.id WHERE f.user_id = 123 AND status = 'accepted';
Benutzer 123 ist Fan dieser Benutzer:
SELECT u.* FROM users u INNER JOIN friend_requests f ON f.user_id = u.id WHERE f.friend_id = 123 AND status = 'waiting';
Vergessen Sie nicht, der Statusspalte einen Index hinzuzufügen.
Außerdem bin ich mir nicht sicher, ob eine Tabelle wie diese dafür ideal ist.
BEARBEITEN:
Ich würde wahrscheinlich ein Schema wie dieses wählen:
friend_request
request_from (foreign key to users.user_id)
request_to (foreign key to users.user_id)
resolved (boolean 1 or 0, default is 0)
friend_xref
friend (foreign key to users.user_id)
is_friend_with (foreign key to users_user_id)
fan_xref
user (foreign key to users.user_id)
is_fan_of (foreign key to users.user_id)
Wenn jemand eine Freundschaftsanfrage stellt, füge eine neue Zeile zur Tabelle „friend_request“ hinzu. Wenn der Anforderungsempfänger sich für Folgendes entscheidet:
- um die Anfrage anzunehmen:füge eine neue Zeile zu friend_xref hinzu und setze aufgelöst auf 1 in der Tabelle friend_request
- um die Anfrage abzulehnen:füge eine neue Zeile zu fan_xref hinzu und setze aufgelöst auf 1 in der Tabelle friend_request
Aber es wäre besser, dies unter mysql, database-design oder einem ähnlichen Tag zu fragen, um die besten Antworten zu erhalten.