我目前正在尝试为一个简单的社交网站设计数据库。我正在为我的数据库使用 MySQL。目前,我只有一个用户表。基本上,我希望用户能够添加朋友并能够列出他们的朋友。我正在考虑创建一个朋友表,例如:
friends table
user_id
friend_id
每当有人添加朋友时,它都会创建一个条目。我不确定我的方向是否正确。另一个问题,有没有办法检索所有二级朋友?(朋友的朋友)任何帮助将不胜感激。提前非常感谢!
我目前正在尝试为一个简单的社交网站设计数据库。我正在为我的数据库使用 MySQL。目前,我只有一个用户表。基本上,我希望用户能够添加朋友并能够列出他们的朋友。我正在考虑创建一个朋友表,例如:
friends table
user_id
friend_id
每当有人添加朋友时,它都会创建一个条目。我不确定我的方向是否正确。另一个问题,有没有办法检索所有二级朋友?(朋友的朋友)任何帮助将不胜感激。提前非常感谢!
是的,你在正确的道路上。
您可以通过将朋友表加入自身来检索 2 度朋友
select t2.friend_id
from friends t1
inner join friends t2 on t1.friend_id = t2.user_id
where t1.user_id = ...
要考虑的一件事是交换性——如果 A 是 B 的朋友,那么 B 是 A 的朋友吗?
创建一个包含所有用户属性的用户表,然后创建另一个表来存储用户之间的关系。
关系表将包含两列,每列都包含一个 user_id,在此表中,您将存储两个用户之间的友谊。(否则每个用户只能有一个朋友)。
为了获得不同级别的关系,您需要在两个表之间进行连接。(根据您使用的 RDMBS,您可能有一些快捷方式)。
希望能帮助到你
当然。那会很好用。您所描述的是一种自我参照的多对多关系。查询相当简单。以下是 $current_user 的所有朋友:
select u.* from users as u
inner join friends as f on u.id = f.friend_id
where f.user_id = $current_user_id
需要考虑的是,这在技术上是一个有向图。所以用户 A 可以和用户 B 成为朋友,但用户 B 不一定是用户 A 的朋友。
我有一个存储友谊的连接表。有一列存储请求友谊的用户的 ID,一列存储请求发送到的用户的 ID,一个布尔列存储友谊是否已被接受,以及一个时间戳列存储何时请求已发送。