【问题标题】:MySQL how to do COUNT(*) on a query with joins?MySQL 如何对带有连接的查询执行 COUNT(*)?
【发布时间】:2011-06-08 12:53:44
【问题描述】:

有人知道如何对这样的查询执行 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

谢谢!

【问题讨论】:

  • 您要计算哪一列?
  • review_id,但仅适用于所有其他约束的评论。 IE。我不需要评论总数,而是说只计算某个产品的评论。

标签: mysql join count


【解决方案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

【讨论】:

  • 您知道您的结果数据将被限制为 1 条记录吗?
  • 因为 Count() 是聚合函数并且需要“group by”子句,当没有提供“group by”时,所有行都会被分组。
  • @cichy,希望现在没事吧?
  • 无论如何,count 列确实返回了正确的结果,我猜这很重要。谢谢你们!
【解决方案2】:

不需要Left Join,和order一样,不用计算所有字段,一个就够了

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

【讨论】:

  • 谢谢,但这会让我获得所有批准的评论,对吧?我需要的是例如仅获得某个产品的所有批准评论
【解决方案3】:
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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-23
    • 2013-01-30
    • 1970-01-01
    • 2015-02-06
    • 2013-10-03
    • 1970-01-01
    相关资源
    最近更新 更多