多くのテーブルを含むものにMySQLを使用したことはありません。必要な情報を取得するために、クエリをネストしました。
posts
いくつかのブログとそれに関連するものを出力したいときに私が考えることができる良い例comments
。
表は次のようになります(質問を短くするために簡略化されています)。
投稿:
id | title | content
コメント:id | post_id | author | content
comments.post_id
明らかに関連するにリンクされている場所post.id
。
次に、このような投稿とコメントを出力します(通常、クエリをもう少し拡張しますが、質問は短くしたいと思います)。
// Get posts.
$posts = mysql_query("SELECT * FROM posts ORDER BY id DESC");
while($prow = mysql_fetch_assoc($posts))
{
$pid = $prow["id"];
// Write post.
echo '
<h2 id="post' . $pid . '">' . $prow["title"] . '</h2>
<p>' . $prow["content"] . '</p>';
// Get related comments.
$cquery = mysql_query("SELECT * FROM comments WHERE post_id = '$pid' ORDER BY id DESC");
while($crow = mysql_fetch_assoc($cquery))
{
$cid = $crow["id"];
// Write comment.
echo '<p id="comment' . $cid . '"><strong>' . $crow["author"] . ':</strong> ' . $crow["content"] . '</p>';
}
}
私の知る限り、これは、ブログの投稿が10個ある場合、11個のクエリがあることを意味します(投稿に対して1個、次に各投稿のコメントに対して追加のクエリ)。それは正気ではないようです。
投稿と関連するコメントを1つにまとめて選択するクエリを作成する方法があると確信していますが、それを行う正しい方法がわかりません。結合について漠然と聞いたことがありますが、それらについて読んだとき、それらは私にはあまり意味がありません。
大まかに次のようなものになってしまうといいでしょう。
$query = mysql_query("
SELECT
posts.id,
posts.title,
posts.content,
comments.id,
comments.author,
comments.content
FROM
posts,
comments
WHERE
comments.post_id = post.id,
");
そして、私はこのようなことをすることができます:
while($row = mysql_fetch_assoc($query))
{
echo '
<h2 id="post' . $row["posts.id"] . '">' . $row["posts.title"] . '</h2>
<p>' . $row["posts.content"] . '</p>';
// Somehow iterate over the comments and display them.
//
}
きちんと達成したいことを説明したいと思います。