Seznam přátel uživatele 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';
Uživatel 123 je fanouškem těchto uživatelů:
SELECT u.* FROM users u INNER JOIN friend_requests f ON f.user_id = u.id WHERE f.friend_id = 123 AND status = 'waiting';
Nezapomeňte do sloupce stavu přidat index.
Také si nejsem jistý, zda je stůl jako tento pro to ideální.
EDIT:
Asi bych zvolil takovéto schéma:
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)
Když někdo požádá o přátelství, přidejte nový řádek do tabulky friend_request. Když se příjemce požadavku rozhodne:
- akceptování požadavku:přidejte nový řádek do friend_xref a nastavte vyřešeno na 1 v tabulce friend_request
- Chcete-li požadavek odmítnout:přidejte nový řádek do fan_xref a nastavte vyřešeno na 1 v tabulce friend_request
Ale bylo by lepší se na to zeptat pod mysql, database-design nebo nějakou podobnou značkou, abyste získali nejlepší odpovědi.