我有一个表order_detail包含此信息
id_order id_product
1 2
1 3
2 2
2 4
2 5
2 3
3 2
3 1
4 2
4 3
4 1
4 6
我想用当前产品获得最畅销的产品(前5个元素),比如说产品ID 2
我尝试了这个,但是返回了一个错误的结果
SELECT od2.product_id, count(od2.`product_id`) FROM `ps_order_detail` od1
LEFT JOIN ps_order_detail od2 ON od1.id_order = od2.id_order where
od2.product_id != od1.product_id AND od1.product_id=2
结果应该是
product_id count(od2.`product_id`)
3 3
4 2
1 1
5 1
6 1
最佳答案
您的查询是正确的。通常,您缺少group by
:
select od.product_id, count(od2.id_order) as NumTimesWith2
from ps_order_detail od left join
ps_order_detail od2
on od.id_order = od2.id_order and
od2.product_id = 2
where od.product_id <> 2
group by od.product_id
order by count(od2.id_order) desc;
如果只需要一种这样的产品,则在查询中添加
limit 1
。此外,这还假设产品在订单内不重复。如果可以的话,您可以使用
count(distinct od.id_order)
快速获得更好的计数。