我有2个表,一个用于文章,第二个用于评论,现在我想使用1个查询获得评论总数和所有文章详细信息,我不想分别使用2个查询,一个用于文章详细信息,一个用于评论,有人可以帮助我获得特定文章的评论总数及其所有评论..
文章表... article_id 评论表.... comment_id,comment_article_id
正常我得到了评论 SELECT COUNT(*)as total ....
现在我想通过一个查询来获取这两件事(来自article_id的完整文章详细信息)和评论表中的评论总数(如果可能的话,还有关于该文章ID的所有评论详细信息)......
问候
答案 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;