4

投稿のリストを含むページを作成しようとしています。各投稿の下には、その投稿に属するすべてのコメントがあります。最初は、SQL の JOIN を使用してすべての投稿とコメントを取得するために 1 つのクエリのみを使用したかったのですが、たとえば、複数のコメントを含む投稿を取得することは不可能であることがわかりました。投稿ごとに最大 1 つのコメントがある投稿のみを表示するか、コメントの量に応じて投稿を複数回表示します。

この関連する質問で、誰かが 2 つのクエリの使用について話しました: How to print posts and comments with only one sql query

しかし、どうすればこれを行うことができますか?

投稿のクエリと while ループがありますが、そのループ内で投稿ごとにコメントのクエリを実行したくないことは明らかです。

$getPost = mysql_query('SELECT p.post_id,
                               p.user_id,
                               p.username,
                               p.content
                        FROM post p
                        ORDER BY p.post_id DESC');

while($row = mysql_fetch_array($getPost)) 
{ 
... 
}

テーブル構造 (応答はコメントを格納するためのテーブルです):

POST (post_id (primary key), user_id, username, content, timestamp)
REPLY (reply_id (primary key), post_id, username, reply_content, timestamp)
4

2 に答える 2

1

コメントなしでそれらの投稿も取得するには、LEFT OUTER JOIN. その場合、2 番目のテーブルに対応する行がない最初のテーブルの行は、NULL 値で構成される行とペアになります。

SELECT *  FROM posts
LEFT OUTER JOIN comments ON posts~post_id = comments~post_id;

ちなみに、 もありRIGHT OUTER JOINます。これを使用すると、親投稿が何らかの理由で失われたものを含むすべてのコメントが取得されますが、コメントのない投稿は取得されません。

于 2012-11-27T16:00:50.603 に答える