gpt4 book ai didi

mysql - 我可以将这些嵌套查询作为一个查询运行吗?如何处理返回的信息?

转载 作者:行者123 更新时间:2023-11-29 14:30:30 25 4
gpt4 key购买 nike

我从未使用过 MySQL 来处理涉及很多表的事情;当我有时,我会嵌套查询来获取我需要的信息。

当我想要输出一些博客帖子及其相关评论时,我能想到一个很好的例子。

表格可能如下所示(简化以保持问题简短):

posts:           id | title | content
comments:   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.
//
}

我希望我正确地解释了我想要实现的目标。

最佳答案

我认为你的方法会起作用(至少在 MS SQL 中会有效),但标准方法是使用联接:

SELECT
posts.id AS post_id,
posts.title,
posts.content,
comments.id AS comment_id,
comments.author,
comments.content
FROM posts
INNER JOIN comments ON comments.post_id = post.id
ORDER BY post_id, comment_id DESC

关于mysql - 我可以将这些嵌套查询作为一个查询运行吗?如何处理返回的信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10115766/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com