我目前正在设计一个简单的社交网站的数据库。我为我的数据库使用MySQL。目前,我只有一个用户表。基本上,我希望用户能够添加朋友并能够列出他们的朋友。我想创建一个朋友表,类似的:一个简单的社交网站的数据库设计
friends table
user_id
friend_id
每当有人添加了一个朋友,它会创建一个条目。我不确定我是否在正确的方向。另一个问题是,有没有办法找回所有二级朋友?(朋友的朋友)任何帮助,将不胜感激。提前感谢!
我目前正在设计一个简单的社交网站的数据库。我为我的数据库使用MySQL。目前,我只有一个用户表。基本上,我希望用户能够添加朋友并能够列出他们的朋友。我想创建一个朋友表,类似的:一个简单的社交网站的数据库设计
friends table
user_id
friend_id
每当有人添加了一个朋友,它会创建一个条目。我不确定我是否在正确的方向。另一个问题是,有没有办法找回所有二级朋友?(朋友的朋友)任何帮助,将不胜感激。提前感谢!
是的,你走在正确的道路上。
您可以通过加入好友表本身
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,你可能有一些捷径)。
希望它有帮助
我有一个存储友谊的连接表。有一列存储请求友谊的用户的ID,存储请求被发送到的用户的ID的列,存储友谊是否被接受的布尔列以及用于存储请求已发送。
当然。这将工作正常。你所描述的是一种自我引用的多对多关系。查询非常简单。这里是$ 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成为朋友。
谢谢!这帮了很多。 – maru
创建包含所有用户信息并具有PK作为user_id的表,将frind_id作为FK用于朋友表user_id – solaimuruganv