数据库查询社交网站的时间线

时间:2014-10-20 20:11:42

标签: php mysql

我正在为我的大学建立一个社交网站和告示板系统。

我想在主页的LoggedInUser的朋友中显示10到15个最新帖子。

如果我从数据库中选择所有时间轴表行,那么它将占用更多内存,并且还会获取不属于LoggedInUser的朋友的帖子。

那么最好的方法应该是什么呢?

帮助我。

表"朋友"存储UserID,FriendID和状态。 表"时间表"使用PostID和UserID

存储所有用户的帖子

我正在使用Apache,PHP和MySQL。

...谢谢

2 个答案:

答案 0 :(得分:2)

在构建社交网络之前,您需要仔细研究SQL连接。我不会撒谎。如果您计划构建任何类型的社交网络,这是一个非常基本的问题,您应该能够自己回答(没有Stack Overflow)。

那就是说,这里有两个可行的查询。你可以试着尝试两者,并阅读两者之间的差异,以及使用一个与另一个的性能影响。我还要提一下,这些将为您提供所需的PostID,但您需要加入一个帖子表(大概)来获取实际的帖子内容。我把这一步留给你了。

此外,在获取10-15个最新帖子方面,你需要问自己一个问题......你甚至可以用你列出的表回答这个问题吗?

提示:你不能。问题:为什么不呢?

查询选项1(获取属于friends的朋友的所有帖子ID .UserId = ???):

SELECT b.postid, b.userid
FROM friends AS a
INNER JOIN timeline AS b
ON a.FriendID  = b.userid
WHERE a.UserID = ???

查询选项2(获取属于friends的朋友的所有帖子ID.UserId = ???):

SELECT b.postid, b.userid
FROM timeline AS b
WHERE EXISTS (SELECT * FROM friends 
WHERE friends.UserID = ??? AND b.UserID = friends.FriendID)

现在,问题是:上面的两个查询都返回相同的结果吗?一个比另一个好吗?如果是这样,它总是优先考虑还是取决于具体情况?能给我举个例子?

答案 1 :(得分:0)

  1. 添加时间戳以指定您要显示的帖子。
  2. 如果您正在建立一个社交网络网站从不选择所有行(如果您将其置于在线状态,您将面临安全问题,注入等)
  3. 如果您将PHP和HTML混合在一起,请执行IF-ELSE语句:如果他们是朋友,则显示朋友表中朋友的帖子,其值为 1
  4. 希望这有帮助,我还为学校项目建立了一个社交网站。