2014-10-20 53 views
-1

我正在为我的大学建立一个社交网站和公告板系统。数据库查询社交网站的时间表

我想在Home Page中显示来自LoggedInUser的朋友的10到15条最新帖子。

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

那么最好的办法是什么?

帮帮我。

表“朋友”存储用户ID,FriendID和状态。 表“时间轴”存储所有用户PostID和用户ID的帖子我正在使用Apache,PHP和MySQL的

谢谢...

+2

您是否考虑过在时间表中添加时间戳,以便您可以搜索最新帖子并向后计算给定用户ID的最新帖子数。 – Kinnectus 2014-10-20 20:20:57

回答

2

你会想看看SQL连接非常认真你去建立一个社交网络之前。我不会说谎。如果您打算构建任何形式的社交网络,这是一个非常基本的问题,您应该可以自己回答(没有Stack Overflow)。

这就是说,这里有两个查询将工作。你可以尝试两种方法并阅读两者之间的差异,以及使用一个和另一个的性能影响。我还应该提到,这些会为您提供您需要的PostID,但您需要将它们与帖子表(大概)结合起来以获取实际的帖子内容。我把这一步留给你。

此外,就获得10-15个最新帖子而言,您需要问自己一个问题......您甚至可以用列出的表回答这个问题吗?

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

查询选项1(得到所有的交IDS属于friends.UserId =朋友???):

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

查询选项2(被所有的交IDS属于朋友的朋友.UserId = ???):

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

现在,你一个问题:你以上的回报这两个查询相同的结果?一个比另一个更好吗?如果是这样,它总是更好还是取决于情况?你可以给我一个例子吗?

0
  1. 添加时间戳以指定要显示的帖子。
  2. 如果你正在建立一个社交网站,请不要选择所有的行(如果你把它放在线上,你会面临安全问题,注射等等)
  3. 如果你把PHP和HTML混合在一起做IF- ELSE语句:IF他们是朋友显示朋友的帖子,这些朋友在朋友列表中的值为。

希望这有助于我也建立了一个学校项目的社交网站。