2011-06-08 67 views
1

有誰知道我該如何執行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

回答

1

試試這個:

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

1

左連接的,一樣的購買,你不必指望所有領域,一個就足夠

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

0
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