如何使用mysql在php中创建像朋友系统一样的Facebook

时间:2010-08-02 06:46:49

标签: mysql database database-design

我想创建像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获取粉丝列表以及如何结交朋友的朋友?

2 个答案:

答案 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表。当请求收件人选择:

  • 接受请求:向friend_xref添加新行并在friend_request表中将已解决设置为1
  • 拒绝请求:向fan_xref添加新行并在friend_request表中将resolve设置为1

但是最好在mysql,数据库设计或类似的标签下问这个以获得最佳答案。

答案 1 :(得分:1)

可能最好创建一个'status'表,然后在状态列中使用外键:)