0

我目前正在尝试为一个简单的社交网站设计数据库。我正在为我的数据库使用 MySQL。目前,我只有一个用户表。基本上,我希望用户能够添加朋友并能够列出他们的朋友。我正在考虑创建一个朋友表,例​​如:

friends table
user_id
friend_id

每当有人添加朋友时,它都会创建一个条目。我不确定我的方向是否正确。另一个问题,有没有办法检索所有二级朋友?(朋友的朋友)任何帮助将不胜感激。提前非常感谢!

4

4 回答 4

3

是的,你在正确的道路上。

您可以通过将朋友表加入自身来检索 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 的朋友吗?

于 2012-10-18T13:07:49.697 回答
1

创建一个包含所有用户属性的用户表,然后创建另一个表来存储用户之间的关系。

关系表将包含两列,每列都包含一个 user_id,在此表中,您将存储两个用户之间的友谊。(否则每个用户只能有一个朋友)。

为了获得不同级别的关系,您需要在两个表之间进行连接。(根据您使用的 RDMBS,您可能有一些快捷方式)。

希望能帮助到你

于 2012-10-18T13:13:55.267 回答
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 的朋友。

于 2012-10-18T13:25:46.387 回答
0

我有一个存储友谊的连接表。有一列存储请求友谊的用户的 ID,一列存储请求发送到的用户的 ID,一个布尔列存储友谊是否已被接受,以及一个时间戳列存储何时请求已发送。

于 2012-10-18T13:15:53.703 回答