mysql查询获取文章的评论总数

时间:2012-02-19 11:26:34

标签: php mysql

我有2个表,一个用于文章,第二个用于评论,现在我想使用1个查询获得评论总数和所有文章详细信息,我不想分别使用2个查询,一个用于文章详细信息,一个用于评论,有人可以帮助我获得特定文章的评论总数及其所有评论..

文章表... article_id 评论表.... comment_id,comment_article_id

正常我得到了评论 SELECT COUNT(*)as total ....

现在我想通过一个查询来获取这两件事(来自article_id的完整文章详细信息)和评论表中的评论总数(如果可能的话,还有关于该文章ID的所有评论详细信息)......

问候

3 个答案:

答案 0 :(得分:6)

要获取文章详细信息和评论数量,您可以使用以下

SELECT 
    articles.*,
    COALESCE(COUNT(comments.comment_id),0) AS numberOfCommments

FROM articles
LEFT JOIN comments
ON comments.comment_article_id = articles.article_id
AND comments.comment_type = 'B'

// If selecting a specific article use this line
WHERE articles.article_id = [[ARTICLE_ID]]

// If selecting all articles with counts use this line
GROUP BY articles.article_id

由于两者很可能具有不同的字段,因此您无法在与article表相同的查询中获得评论详细信息。如果您真的想让所有评论后面跟着文章,那么下面的内容就可以了。使用以下内容,确保第一个查询中的列与第二个查询中的列匹配(即文章中的标题列匹配空字符串(显示)或注释中的标题列)。 我个人不会这样做,而只会做2个查询,一个用于获取文章详细信息,一个用于获取任何注释,因为列类型可能不匹配并不重要,这也意味着文章查询不需要加入评论,因为您可以只计算评论查询中的行数

单一查询联合方法,不建议

(
    SELECT
        'article' AS rowType,
        article_date_posted,
        article_title,
        article_content
    FROM articles
    WHERE article_id = [[ARTICLE_ID]]
)
UNION
(
    SELECT
        'comment' AS rowType,
        comment_date_posted,
        '',  // Empty string because comments usually have no title
        comment_content
    FROM comments
    WHERE comment_article_id = [[ARTICLE_ID]]
    AND comment_type = 'B'
    ORDER BY comment_date_posted ASC
)

2查询方法,更简单,在大多数情况下更有效

//articles query
SELECT *
FROM articles
WHERE article_id = [[ARTICLE_ID]];

//comments query
SELECT *
FROM comments
WHERE comment_article_id = [[ARTICLE_ID]]
AND comment_type = 'B';

答案 1 :(得分:2)

试试这个:

SELECT 
  COUNT(comment.comment_id) AS commentCount, 
  article.*
FROM article
LEFT JOIN comment ON article.article_id = comment.comment_article_id
GROUP BY article.article_id

答案 2 :(得分:1)

select count(*),comment_details 
from comments INNER JOIN articles
where a.article_id = c.comment_article_id
group by a.article_id;