ユーザー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に新しい行を追加し、friend_requestテーブルで解決済みを1に設定します
- リクエストを拒否するには:fan_xrefに新しい行を追加し、friend_requestテーブルでresolvedを1に設定します
ただし、最良の回答を得るには、mysql、database-design、または同様のタグでこれを確認することをお勧めします。