如何使用mysql在php中创建类似Facebook的好友系统
我想创建一个像facebook这样的朋友系统,比这还奇怪。当用户添加某人时,将通知该人,若同意,则他们将成为共同的朋友(在本例中,字面意思是双方都是朋友),或者若该人未响应请求,则他们将成为该人的粉丝。如果有人拒绝了请求,他们将不再是粉丝或朋友 如何在PHP和MYSQL中实现这一点。这是我最初的计划,不知怎的,我不确定这是否是最好的办法 MYSQL表如何使用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 --
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下问这个问题,数据库设计或一些类似的标签来获得最佳答案。可能最好创建一个“状态”表,然后在状态列中使用外键:)可能最好创建一个“状态”表,然后在状态列中使用外键:)那么您认为这件事最适合于此吗?无论如何,我都不太确定。那么你认为这件事最适合做什么呢?无论如何,我不太确定是的,谢谢你提醒我,我想,但为了简化我的问题,我只使用字符串而不是键是的,谢谢你提醒我,我想,但为了简化我的问题,我只使用字符串而不是键