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


mysql query to get total number of comments on article

我有两个表,一个是文章,第二个是评论,现在我想用一个查询来获得评论总数和所有文章的详细信息,我不想用两个查询——一个单独用于文章详细信息和一个用于评论,有人能帮我获得特定文章的评论总数和它的所有评论吗。。

文章表。。。article_id注释表。。。。comment_id,comment_article_id

获得评论很正常选择计数(*)作为总数。。。。

现在,我只想通过一个查询就可以获得这两件事(article_id中的完整文章详细信息)和评论表中的评论总数(如果可能的话,还可以获得该文章id上的所有评论详细信息)。。。

关于

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

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

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

不建议使用单一查询联合方法

(
    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';

试试这个:

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
select count(*),comment_details 
from comments INNER JOIN articles
where a.article_id = c.comment_article_id
group by a.article_id;