我从未将 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 个用于帖子,然后额外查询每个帖子的评论)。这似乎不太正常。
我确信有一种方法可以创建一个查询,它将选择帖子以及相关评论多合一,我只是不知道正确的方法是什么。我隐约听说过联接,但是当我读到它们时,它们对我来说并没有多大意义。
最终得到大致如下的东西会很好:
$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.
//
}
我希望我能正确解释我想要实现的目标。