Vänlista för användare 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';
Användare 123 är ett fan av dessa användare:
SELECT u.* FROM users u INNER JOIN friend_requests f ON f.user_id = u.id WHERE f.friend_id = 123 AND status = 'waiting';
Glöm inte att lägga till index i statuskolumnen.
Dessutom är jag inte säker på att ett sådant här bord är idealiskt för detta.
EDIT:
Jag skulle förmodligen välja ett schema som detta:
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)
När någon gör en vänförfrågan, lägg till en ny rad i tabellen friend_request. När begärandemottagaren väljer att:
- för att acceptera begäran:lägg till ny rad i friend_xref och ställ in löst till 1 i friend_request-tabellen
- för att avslå begäran:lägg till ny rad i fan_xref och ställ in löst till 1 i tabellen friend_request
Men det skulle vara bättre att fråga detta under mysql, database-design eller någon liknande tagg för att få bästa svar.