2014-10-20 41 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他們是朋友顯示朋友的帖子,這些朋友在朋友列表中的值爲。

希望這有助於我也建立了一個學校項目的社交網站。