Php 打印每个产品的订单数量\u id

Php 打印每个产品的订单数量\u id,php,sql,count,Php,Sql,Count,有比我更快的解决方案吗 我有一个包含orders\u id和products\u id列的表(无法更改) 现在我想知道有多少订单是用独特的产品制作的 我尝试了以下方法。但它在加载太多行(160000行)时崩溃 我也尝试使用子查询,但问题与上面相同 SELECT (SELECT count(*) FROM orders_products WHERE products_id = op.products_id) AS totalorders, products_id, products_nam

有比我更快的解决方案吗

我有一个包含orders\u id和products\u id列的表(无法更改)

现在我想知道有多少订单是用独特的产品制作的

我尝试了以下方法。但它在加载太多行(160000行)时崩溃

我也尝试使用子查询,但问题与上面相同

    SELECT (SELECT count(*) FROM orders_products WHERE products_id = op.products_id) AS totalorders, products_id, products_name FROM orders_products op ORDER BY products_id ASC
那么:

SELECT `products_id`, `products_name`, COUNT(*) FROM `orders_products` GROUP BY (`products_id`, `products_name`) ORDER BY `products_id`

希望你有一个关于产品的索引

在这种情况下,我会尝试以下方法:

选择products\u id、Min(products\u Name)、count(*)作为TotalOrders 从订单到产品 按产品分组\u ID 按产品订购\u ID asc


有几种其他方法可以获取产品名称,例如将其包含在分组中(还有一些其他含义)。

为什么不使用
分组依据
?如果这是MySQL,请发布
EXPLAIN
输出。因为您是在产品id上聚合,所以需要在产品名称上使用聚合函数,或者需要将其包含在分组中。@TDrudge nice spot。更正了答案。谢谢。
SELECT `products_id`, `products_name`, COUNT(*) FROM `orders_products` GROUP BY (`products_id`, `products_name`) ORDER BY `products_id`