我想创建像facebook这样的朋友系统,非常奇怪。当用户添加某人时,将通知某人,如果同意则他们将成为共同的朋友(在这种情况下,意味着双方都是朋友,字面意思)或者如果某人留下请求没有响应,他们将成为有人。有人拒绝了这个请求,他们将不再是粉丝,也不会是朋友。
如何在PHP中使用MYSQL执行此操作。这是我最初的计划,不知怎的,我不确定它是最好的方法。
MYSQL表
user_id (request made by) | friend_id (request point towards) | status
--------------------------------
123 | 452 | 'waiting'
525 | 123 | 'waiting'
意思是用户123从525有1个好友请求,并向452做了1个好友请求。 这里的问题是我将如何获得用户123的朋友列表?如果用户123接受525的请求而用户452接受123的请求。还有如何通过MYSQL QUERY获取粉丝列表以及如何结交朋友的朋友?
答案 0 :(得分:3)
用户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';
User 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表。当请求收件人选择:
但是最好在mysql,数据库设计或类似的标签下问这个以获得最佳答案。
答案 1 :(得分:1)
可能最好创建一个'status'表,然后在状态列中使用外键:)