gpt4 book ai didi

php - MySQL 连接返回太多行

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

我对 MySQL 比较陌生,对这部分感到困惑。

我正在构建一个简单的博客页面,它将显示一个博客以及与之相关的评论。我目前有两个表来处理这些数据:

博客

.blog_id (primary), .blog_title, .blog_date, .blog_post

评论

.comment_id (primary), .blog_id, .comment_name, .comment

我想做的是提取一个与 ID 匹配的特定博客,并提取与该博客相关的评论。这是我的查询:

SELECT * FROM blogs JOIN comments ON blogs.blog_id=comments.blog_id WHERE blogs.blog_id = $active ORDER BY comments.comment_id

此查询会提取正确的信息,但如果博客上有两条评论,它将在循环浏览评论时显示博客和所有内容两次。我想一次显示所有博客信息,然后循环显示评论。

我希望我解释清楚了。任何帮助都会很棒。谢谢。

最佳答案

您所描述的行为是联接应该执行的操作。如果每个博客条目只需要 1 条记录,则需要使用分组依据。要获取所有博客记录的列表以及评论数量,您可以执行如下查询:

SELECT blogs.*,Count(comments.comment_ID) 
FROM blogs
LEFT JOIN comments
ON blogs.blog_id=comments.blog_id WHERE blogs.blog_id = $active
ORDER BY comments.comment_id
GROUP By Blog.BlogID

但是,您说您只想显示博客,然后显示与该博客相关的评论。在那种情况下,您很可能只使用一个初始查询来提取所有博客,然后在遍历所有博客条目时使用另一个查询来获取每个博客的评论。这是一些伪代码。

select * FROM blogs

For each record from above
Code for displaying blog goes here

Select * FROM Comments where Blog_id = $blogID

For each comment from above query
code for displaying comment goes here

Next COmment

Next Blog

您可以只对所有评论进行一次选择,这样效率会更高,但会使结果代码更加复杂,因为您必须使用 php 在结果列表中查找记录。只使用多个查询要简单得多,而且对于大多数博客(一个页面上最多 10 篇文章)来说,这不会有太大的不同。如果你真的想使用单个查询,你可以按照下面的伪代码来构造你的程序。

SELECT * FROM blogs 
LEFT JOIN comments ON blogs.blog_id=comments.blog_id
WHERE blogs.blog_id = $active ORDER BY blogs.blog_id, comments.comment_id

$LastBlogID = -1

FOR EACH Record
If $LastBlogID != record['blog_id']
Display Blog Information
$LastBlogID = record['blog_id']
End If

Display Comment Information
Next Record

关于php - MySQL 连接返回太多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7669179/

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