Php 帖子评论的输出量

Php 帖子评论的输出量,php,mysql,pdo,Php,Mysql,Pdo,我试图在索引页上显示一篇文章的评论量,在那里显示文章的标题 我能够显示标题,正文,发布人,以及在索引上创建的日期,除了它的评论数量。我很难从数据库中选择它,即使我的查询设置正确 <?php if(empty($posts)): ?> <p>There are currently no posts.</p> <?php else: ?> <?php foreach($posts as $post): ?>

我试图在索引页上显示一篇文章的评论量,在那里显示文章的标题

我能够显示标题,正文,发布人,以及在索引上创建的日期,除了它的评论数量。我很难从数据库中选择它,即使我的查询设置正确

<?php if(empty($posts)): ?>
     <p>There are currently no posts.</p>
   <?php else: ?>

   <?php foreach($posts as $post): ?>

   <div class="post">
    <div class="title"><a href="<?php echo BASE_URL; ?>/post.php?post=<?php echo $post['id']; ?>"><?php echo $post['name']; ?></a></div>
    <div class="short-body"><?php echo $post['body']; ?> <a href="#">Read more</a></div>
    <div class="posted-by">Posted by <?php echo $post['user']; ?></div> <div class="date">On <?php echo $post['created']; ?> 

    | <?php foreach ($comments as $comment): echo $comment[0]; ?>   comments <?php endforeach; ?> </div>
   </div>

   <?php endforeach; ?>

    <?php endif; ?>

我确信我的问题是$id没有被正确使用。虽然我不知道该放什么。post_id被分配给post的id,其中注释存储在数据库中。我已经尝试了很多方法,但仍然不起作用。

我认为你可以通过一次查询来检索帖子信息和评论数量,这应该可以避免你的问题,而且效率更高;例如:

SELECT
  posts.name,
  posts.body,
  posts.id,
  posts.created,
  posts.user,
  count(comments.id) AS comments_count

FROM posts
   LEFT JOIN comments ON comments.post_id = posts.id

GROUP BY posts.id DESC

对于您最初的查询,我认为问题在于
$posts
包含多行,因此
$posts['id']
不存在,但是
$posts[0]['id']
存在,
$posts[1]['id']
也存在,等等。。。如果你想保留原始查询,你应该迭代
$posts
,将评论数与结果中的每篇文章相关联。

现在只选择有评论的文章,我怎么做才能让它选择没有评论的文章?是的,你是对的。它应该是左连接,而不是内部连接。我将编辑我的答案。感谢这项工作,现在的问题是,没有评论的帖子被显示为只有一条评论。你可能没有注意到,当我在回答中更改
内部连接时,我在
左连接中更改了
计数(*)
COUNT(comments.id)
。我的第一个答案是不正确的,因为它假设每个帖子至少有一条评论,这是不正确的。正确的方法是做一个
左连接
,因为我们希望看到每一篇有注释或没有注释的文章,而不是按文章id(
count(*)
)来计算行数,而是计算注释(
count(comments.id)
)。对不起,我回答得太快了。谢谢,我没注意到你也换了计数(*),谢谢你帮了大忙。
SELECT
  posts.name,
  posts.body,
  posts.id,
  posts.created,
  posts.user,
  count(comments.id) AS comments_count

FROM posts
   LEFT JOIN comments ON comments.post_id = posts.id

GROUP BY posts.id DESC