Daftar teman pengguna 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';
Pengguna 123 adalah penggemar pengguna ini:
SELECT u.* FROM users u INNER JOIN friend_requests f ON f.user_id = u.id WHERE f.friend_id = 123 AND status = 'waiting';
Jangan lupa tambahkan indeks pada kolom status.
Juga, saya tidak yakin meja seperti ini ideal untuk ini.
EDIT:
Saya mungkin akan memilih skema seperti ini:
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)
Ketika seseorang membuat permintaan pertemanan, tambahkan baris baru ke tabel friend_request. Saat penerima permintaan memilih untuk:
- untuk menerima permintaan:tambahkan baris baru ke friend_xref dan setel diselesaikan ke 1 di tabel friend_request
- untuk menolak permintaan:tambahkan baris baru ke fan_xref dan setel diselesaikan ke 1 di tabel permintaan_teman
Tetapi akan lebih baik untuk menanyakan ini di bawah mysql, database-design atau beberapa tag serupa untuk mendapatkan jawaban terbaik.