Списък с приятели на потребител 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';
Потребител 123 е фен на тези потребители:
SELECT u.* FROM users u INNER JOIN friend_requests f ON f.user_id = u.id WHERE f.friend_id = 123 AND status = 'waiting';
Не забравяйте да добавите индекс към колоната за състоянието.
Освен това не съм сигурен, че маса като тази е идеална за това.
РЕДАКТИРАНЕ:
Вероятно бих избрал схема като тази:
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)
Когато някой направи заявка за приятелство, добавете нов ред към таблицата friend_request. Когато получателят на заявката избере да:
- за да приемете заявката:добавете нов ред към friend_xref и задайте resolved на 1 в таблицата friend_request
- за да отхвърлите заявката:добавете нов ред към fan_xref и задайте resolved на 1 в таблицата friend_request
Но би било по-добре да попитате това под mysql, database-design или някакъв подобен таг, за да получите най-добри отговори.