PHP/MySQL中朋友的朋友?

Jas*_*vis 2 php mysql facebook

我有一个类似于myspace/facebook的社交网络.在我的代码中,你要么是一个人的朋友,要么不是朋友,所以我展示了你与朋友在一起的所有行为(在这篇文章中,我将单独的行动称为公告栏,以便更容易想象.

因此,每当有人发布公告时,它都会显示给任何有朋友的人.

在mysql中你会通过做这样的事情获得一个人朋友列表,

SELECT user_id FROM friends WHERE friend_id = 1 (user ID)
Run Code Online (Sandbox Code Playgroud)

我想知道像Facebook和其他一些网站如何显示你的朋友和朋友的朋友的所有公告帖?

如果有人有想法请显示一些代码,如什么样的mysql查询?

Aar*_*ron 6

答案是他们没有在朋友桌上做选择,他们很可能使用非规范化的新闻事件表.我们在DoInk.com上实现了类似于Facebook的新闻提要,以下是我们如何做到的:

有一个"NewsEvent"的概念,它有一个类型,一个启动器(一个用户id)和一个目标用户(也是一个用户id).(您还可以为与事件相关的其他属性添加其他列,或者将其加入)

当用户在其他用户墙上发布内容时,我们会生成如下事件:

INSERT INTO events VALUES (wall_post_event, user1, user1)
Run Code Online (Sandbox Code Playgroud)

查看user1的配置文件时,您将选择user1是发起者或目标的所有事件.这就是您显示配置文件供稿的方式.(根据您的隐私模型,您可以获得想象并过滤掉事件.出于性能原因,您可以考虑在内存中执行此操作)

例:

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
Run Code Online (Sandbox Code Playgroud)

当您想要查看与您的朋友相关的所有事件的新闻源时,您可以执行查询,选择发起人在您的朋友集中的所有事件.

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