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