我目前正在尝试为简单的社交网站设计数据库。我正在使用MySQL作为我的数据库。目前,我只有一个用户表。基本上,我希望用户能够添加朋友并能够列出他们的朋友。我正在考虑创建一个朋友表,例如:
friends table
user_id
friend_id
每当有人添加朋友时,它都会创建一个条目。我不确定我是否正确的方向。另一个问题,是否有办法检索所有二级朋友?(朋友的朋友)任何帮助将不胜感激。非常感谢提前!
答案 0 :(得分:3)
是的,你走的是正确的道路。
您可以通过将朋友表加入自身来检索二级朋友
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的朋友吗?
答案 1 :(得分:1)
创建一个包含所有用户属性的用户表,然后创建另一个用于存储用户之间关系的表。
关系表将包含两列,每列都包含一个user_id,在此表中,您将存储两个用户之间的友谊。 (否则你每个用户只能拥有一个朋友)。
为了获得不同级别的关系,您需要在两个表之间建立连接。 (根据您使用的RDMBS,您可能有一些快捷方式)。
希望有所帮助
答案 2 :(得分:1)
不确定。那会很好。你所描述的是一种自我引用的多对多关系。查询非常简单。这是$ 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的朋友。
答案 3 :(得分:0)
我有一个存储友谊的联接表。有一列用于存储请求友谊的用户的ID,一列用于存储请求发送到的用户的ID,一个布尔列用于存储是否已接受友谊,以及一个时间戳列,用于存储请求已发送。