2009-07-28 21 views
0
以下

は、私が(のようにTwitterなど) ユーザステータスのポストを長谷ページこれらのポスト ユーザーの写真と名前の コメントがステータスポストやコメント4番目のmysqlテーブルにJOINするかIN句を使用する必要がありますか?

投稿者表示するために働いているMySQLのクエリです

IN句のユーザーIDのリストは、100万行程度の大きな表である別の問合せから生成されます。 以下のクエリにそのテーブルをジョインするか、私が現在やっているように別の結果を得てください。 IDの文字列として表示されますか?

SELECT s.statusid, s.userid, s.statustype, 
     s.subject, s.datetime, c.commentid, 
     c.statusid, c.userid, c.comment, c.datetime, 
     fru.disp_name, fru.pic_url 
FROM teststatus AS s 
LEFT JOIN teststatuscomments AS c ON s.statusid = c.statusid 
LEFT JOIN friend_reg_user AS fru ON (fru.auto_id = s.userid 
             AND fru.auto_id = c.userid) 
WHERE s.userid =1 
OR s.userid 
IN (2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20) 
ORDER BY s.statusid 
+0

"問題は、他のテーブルの両方でfru.auto_id = useridに必要です"と、すでに "FROM teststatus AS"を使用していないはずです。 LEFT JOIN teststatuscomments AS c ON(s.statusid = c .statusidとs.userid = c.userid) "? – palindrom

+0

いいえ、これは何かのため、コメント付きのブログタイプの投稿ですので、投稿したユーザーはブログ投稿の投稿者である必要はありません – JasonDavis

答えて

1

大規模なIN句でこのようなクエリを実行する必要がある場合は、スキーマで何かのような臭いがありません。

このような長いIN文を生成する代わりに、これらの行を結合する必要があります。 何百万という行には何が保存されていますか?

+0

私の質問の最初の部分はわかりました。上記のように、他の部分はちょうど私がこれに別の参加を加えるべきかどうかの質問です – JasonDavis

+0

百万行のテーブルにはフレンドID番号、ユーザーID番号、ステータス番号、それがありますそのユーザーは – JasonDavis

+0

とお付き合いありがとうございます。だからあなたは友人のコメントだけを欲しがったり、友人だけが投稿したりすることができますか? – markus

0

両方とも試してみてください。元の質問にも両方のコードを投稿し、さまざまな同時スレッドで結果をベンチマークします。繁栄のためにあなたのmysqlバージョン文字列を引用してください。