2011-08-02 83 views
1

顯示朋友的帖子的最佳方式是什麼?php mysql顯示朋友的帖子

每個用戶最多可以有5000個朋友。

步驟:

1)mysql檢索5000個朋友的用戶名。

2)在php數組中存儲5000個朋友的用戶名。

3)SELECT posts, datatime FROM tbl_posts WHERE username IN ($array) ORDER BY id DESC LIMIT 10;

問題:比方說zac1987是PHP數組第5000項。如果zac1987發佈了10條最新帖子,mysql是否需要浪費時間來循環5000個項目以確定帖子是否由他發佈?所以,如果我想顯示10個最新帖子,MySQL是否需要循環5000個朋友x 10個職位= 50,000個項目?並且每5秒需要檢查是否有新帖子,所以這意味着每5秒需要循環50,000個項目?有沒有什麼方法可以阻止這麼多循環/過濾項目的處理?

回答

3
SELECT p.* 
FROM friend f 
JOIN post p 
ON  p.author = f.friend_id 
WHERE f.user_id = $myuserid 
ORDER BY 
     p.post_date DESC 
LIMIT 10 

您應該post (post_date)post (author)創建索引,friend (friend_id, user_id)

根據基數,MySQL要麼讓post領先的連接(在這種情況下,第一個索引將被使用)或使friend領先(在這種情況下,它會收集所有朋友的帖子並對其進行排序)。

+0

WOW,永遠不知道我可以通過使用連接方法跳過數組5000個朋友,非常感謝。如果我想讓'post'在連接中領先呢?我想顯示10個最新帖子,我不想顯示10個最新朋友發佈的帖子。 – zac1987

+0

@ zac1987:你可以使用'STRAIGHT_JOIN',但是你最好讓'MySQL'決定。無論如何,您通過'p.post_date'命令查詢後將顯示'10'個最新帖子。引導或驅動的表格不影響查詢的語義。 – Quassnoi

+0

我明白了,非常感謝。 – zac1987