Список друзей пользователя 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 и установите для него значение равным 1 в таблице friend_request
- , чтобы отклонить запрос: добавьте новую строку вfan_xref и set resolved to 1 в таблице friend_request
Но было бы лучше задать этот вопрос в mysql, database-design или другом подобном теге, чтобы получить лучшие ответы.