2014-02-22 66 views
0

基本上我想选择至少有一条评论的所有帖子,并获得每条评论的评论数。到目前为止,我所追求的只是给我一个结果,这个结果有一个准确的数字,但是有不止一个帖子有评论。可以在任何建议的更改,使这项工作选择至少有一条评论的帖子

SELECT 
    posts.id, 
    COUNT(DISTINCT comments.post_id) AS count 
FROM 
    posts 
LEFT JOIN comments ON posts.id = comments.post_id 
+0

您不显示代码以显示结果。就我们所知,你可能不会循环。 – Steve

回答

1

你需要一个group by声明。你可以改变join为内部连接,因为你想与评论仅供网友的帖子:

SELECT p.id, COUNT(*) AS count 
FROM posts p INNER JOIN 
    comments c 
    ON p.id = c.post_id 
GROUP BY p.id; 

表达count(distinct c.post_id)将返回1每一行,因为只有一个独特的ID后的每一行。 COUNT(*)将获得评论的数量。

+0

正是我想弄明白的!谢谢 – user1715025

2

中使用聚合函数,您必须将它们分组see here GROUP BY (Aggregate) Functions有关的职位必须至少含有一个一个评论,你可以使用HAVING count >= 1

SELECT 
    posts.id, 
    COUNT(DISTINCT comments.post_id) AS `count` 
FROM 
    posts 
LEFT JOIN comments ON posts.id = comments.post_id 
GROUP BY posts.id 
HAVING `count` >= 1 
+0

如果您使用INNER JOIN,则不需要HAVING – road242

+0

这很好。是否有可能获得计数值的实际计数,因为现在它说1。但结果是正确的。 – user1715025

+0

@ road242是我不能改变,因为戈登已经提供了使用内部连接的答案 –