Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用mysql在php中创建类似Facebook的好友系统_Mysql_Database_Database Design - Fatal编程技术网

如何使用mysql在php中创建类似Facebook的好友系统

如何使用mysql在php中创建类似Facebook的好友系统,mysql,database,database-design,Mysql,Database,Database Design,我想创建一个像facebook这样的朋友系统,比这还奇怪。当用户添加某人时,将通知该人,若同意,则他们将成为共同的朋友(在本例中,字面意思是双方都是朋友),或者若该人未响应请求,则他们将成为该人的粉丝。如果有人拒绝了请求,他们将不再是粉丝或朋友 如何在PHP和MYSQL中实现这一点。这是我最初的计划,不知怎的,我不确定这是否是最好的办法 MYSQL表 user_id (request made by) | friend_id (request point towards) | status --

我想创建一个像facebook这样的朋友系统,比这还奇怪。当用户添加某人时,将通知该人,若同意,则他们将成为共同的朋友(在本例中,字面意思是双方都是朋友),或者若该人未响应请求,则他们将成为该人的粉丝。如果有人拒绝了请求,他们将不再是粉丝或朋友

如何在PHP和MYSQL中实现这一点。这是我最初的计划,不知怎的,我不确定这是否是最好的办法

MYSQL表

user_id (request made by) | friend_id (request point towards) | status
--------------------------------
123     | 452       | 'waiting'
525     | 123       | 'waiting'
这意味着用户123有一个来自525的朋友请求,并向452发出了一个朋友请求。
这里的问题是我如何获得用户123的好友列表?如果用户123接受525的请求,用户452接受123的请求。以及如何通过MYSQL查询获取粉丝列表..以及如何获取好友的好友?

用户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\u xref添加新行,并在friend\u请求表中将resolved设置为1
  • 若要拒绝请求,请将新行添加到fan_外部参照,并在friend_请求表中将resolved设置为1

但最好在mysql、数据库设计或类似标签下询问此问题,以获得最佳答案。

用户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\u xref添加新行,并在friend\u请求表中将resolved设置为1
  • 若要拒绝请求,请将新行添加到fan_外部参照,并在friend_请求表中将resolved设置为1

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

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

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

那么您认为这件事最适合于此吗?无论如何,我都不太确定。那么你认为这件事最适合做什么呢?无论如何,我不太确定是的,谢谢你提醒我,我想,但为了简化我的问题,我只使用字符串而不是键是的,谢谢你提醒我,我想,但为了简化我的问题,我只使用字符串而不是键