MySQL如何对带有连接的查询执行COUNT(*)操作?

问题描述:

有谁知道我该如何执行COUNT(*)这样的查询?MySQL如何对带有连接的查询执行COUNT(*)操作?

SELECT reviews.review_id, reviews.reviewers_rating, reviews.reviewers_name, reviews.review_date, reviews.pros, reviews.cons, products.product_name, products.slug, products.community_rating, products.number_of_votes, products.users_rating, products.thumb_link, categories.category_name_single 
FROM reviews 
LEFT JOIN products ON reviews.product_id = products.product_id 
LEFT JOIN categories ON products.category = categories.category_id 
WHERE reviews.approved =1 
ORDER BY reviews.review_date DESC 

谢谢!不需要

+0

您试图计算哪一列? – Bill 2011-06-08 12:55:53

+0

review_id,但只有所有其他约束适用的评论。即我不需要评论的总数,但说只计算某个产品的评论。 – CodeVirtuoso 2011-06-08 13:09:44

+0

检查我的更新回答 – 2011-06-08 13:42:30

试试这个:

SELECT Count(reviews.review_id), reviews.review_id, reviews.reviewers_rating, reviews.reviewers_name, reviews.review_date, reviews.pros, reviews.cons, products.product_name, products.slug, products.community_rating, products.number_of_votes, products.users_rating, products.thumb_link, categories.category_name_single 
FROM reviews 
LEFT JOIN products ON reviews.product_id = products.product_id 
LEFT JOIN categories ON products.category = categories.category_id 
WHERE reviews.approved =1 
Group By reviews.review_id 
ORDER BY reviews.review_date DESC 
+0

您知道您的结果数据将被限制为1条记录吗? – cichy 2011-06-08 13:04:22

+0

@cichy,为什么1记录? – 2011-06-08 13:07:19

+0

由于Count()是聚合函数,并且需要“group by”子句,因此如果未提供“group by”,那么将对所有行进行分组。 – cichy 2011-06-08 13:11:58

左连接的,一样的购买,你不必指望所有领域,一个就足够

SELECT COUNT(review_id) FROM reviews WHERE approved =1 

编辑:
如果要计数的产品比你的评论应该是这样的:

SELECT products.*, count(r.review_id) AS reviews_count FROM products AS p 
LEFT JOIN reviews AS r ON p.product_id = r.product_id AND r.approved=1 
GROUP BY products.product_id 
+0

谢谢,但这会让我所有的批准审查,对不对?我需要的是例如仅获得某个产品的所有批准评论 – CodeVirtuoso 2011-06-08 13:11:08

SELECT COUNT(*) FROM reviews 
LEFT JOIN products ON reviews.product_id = products.product_id 
LEFT JOIN categories ON products.category = categories.category_id 
WHERE reviews.approved = 1 AND ... 
ORDER BY reviews.review_date DESC