一尘不染

PHP / MySQL中朋友的朋友?

mysql

我有一个类似于myspace /
facebook的社交网络。在我的代码中,您不是一个人的朋友,还是不是一个朋友,因此,我显示了您与之成为朋友的人的所有操作(在此帖子中,我将这些操作单独称为公告帖子,以使其更易于可视化。

因此,您每当有人发布公告时,都会向在那里的任何朋友显示。

在mysql中,您可以通过执行以下操作来获得个人朋友列表,

SELECT user_id FROM friends WHERE friend_id = 1 (user ID)

我想知道像facebook之类的网站如何显示您的朋友和朋友的朋友发布的所有公告吗?

如果有人有想法,请显示一些代码,例如哪种mysql查询?


阅读 236

收藏
2020-05-17

共1个答案

一尘不染

答案是他们没有在好友表上进行选择,他们很可能使用非标准化的新闻事件表。我们在DoInk.com上实现了类似于Facebook的新闻源,这是我们的处理方式:

这里有一个“
NewsEvent”的概念,它具有一个类型,一个启动器(一个用户ID)和一个目标用户(也是一个用户ID)。(您也可以为与该事件相关的其他属性添加其他列,或将其加入)

当用户在其他用户的墙上张贴内容时,我们将生成如下事件:

INSERT INTO events VALUES (wall_post_event, user1, user1)

查看用户1的配置文件时,您将为所有事件选择用户1是启动者还是目标的事件。这就是显示个人资料供稿的方式。(根据您的隐私模型,您可能会很喜欢并过滤掉事件。出于性能原因,您可以考虑在内存中这样做)

例:

SELECT * FROM events WHERE initiator = user1 or target = user1 //to see their profile feed

SELECT * FROM events WHERE initiator IN (your set of friend ids) //to see your newsfeed

当您想查看与您的朋友有关的所有事件的新闻源时,可以查询以选择发起者在您的朋友集中的所有事件。

避免使用子选择的实现,具体取决于复杂性,它们不会扩展。

2020-05-17