2011-08-02 14 views
1

友達の投稿を表示する最も良い方法は何ですか?php mysql友達の投稿を表示

各ユーザーは最大5000人の友達を持つことができます。

手順:

1)mysqlは5000の友人のユーザー名を取得します。

2)5000人の友人のユーザー名をPHP配列に保存します。

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

質問:のは、PHPの配列で第五千アイテムですzac1987としましょう。最新の10個の投稿がzac1987によって投稿されている場合、投稿が投稿されたかどうかを判断するために、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 

あなたは

friend (friend_id, user_id)は基数に応じて、post (post_date)post (author)にインデックスを作成する必要があり、MySQLが参加し(その場合、最初のインデックスが使用されます)で主導postをしたり、リードfriendを行いますどちらか(この場合、すべての友人の投稿が集められて並べ替えられます)。

+0

WOW、joinメソッドを使用して5000人の友達をアレイでスキップすることはできません。大変ありがとうございます。もし私が 'post'を結合に先導させたいのであれば?最新の10個の記事を表示したいが、10個の最新の友達が投稿した投稿を表示したくない。 – zac1987

+0

@ zac1987:あなたは 'STRAIGHT_JOIN'を使うことができますが、' MySQL'が決めることをお勧めします。あなたは 'p.post_date'によってあなたが注文したので、クエリは' 10'最新の投稿を表示します。どちらの表が先行しているか駆動されていても、問合せのセマンティクスには影響しません。 – Quassnoi

+0

ありがとう、ありがとう。 – zac1987

関連する問題