Danh sách bạn bè của người dùng 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';
Người dùng 123 là người hâm mộ của những người dùng này:
SELECT u.* FROM users u INNER JOIN friend_requests f ON f.user_id = u.id WHERE f.friend_id = 123 AND status = 'waiting';
Đừng quên thêm chỉ mục trên cột trạng thái.
Ngoài ra, tôi không chắc một bảng như thế này là lý tưởng cho việc này.
CHỈNH SỬA:
Tôi có thể sẽ chọn một lược đồ như thế này:
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)
Khi ai đó đưa ra yêu cầu kết bạn, hãy thêm hàng mới vào bảng friend_request. Khi người nhận yêu cầu chọn:
- để chấp nhận yêu cầu:thêm hàng mới vào friend_xref và đặt đã giải quyết thành 1 trong bảng friend_request
- để từ chối yêu cầu:thêm hàng mới vào fan_xref và đặt đã giải quyết thành 1 trong bảng friend_request
Nhưng sẽ tốt hơn nếu bạn hỏi điều này trong mysql, database-design hoặc một số thẻ tương tự để nhận được câu trả lời tốt nhất.