【发布时间】:2016-08-19 09:29:24
【问题描述】:
我正在尝试写一个简单的“购买此产品的客户也购买了...”
我有一个包含订单的order 表和一个包含与订单相关的所有产品的order_product 表。
为了找出使用product_id = 155 购买的五个最受欢迎的产品,我编写了以下查询:
select product_id, count(*) as cnt
from order_product
where product_id != 155
and order_id in
(select order_id from order_product where product_id = 155)
group by product_id
order by cnt desc
limit 5;
因此,内部查询获取包含我感兴趣的产品的所有订单的列表 (product_id = 155),然后外部查询查找不是同一产品但属于我的产品所在的顺序。
然后将它们排序并限制在前 5 名。
我认为这行得通,但它需要很长时间 - 我想这是因为我正在使用包含几千个列表的 IN。
我想知道是否有人可以指出我以更优化的方式编写它的方向。
非常感谢任何帮助。
【问题讨论】:
-
您是否曾经两次在“订单”中拥有相同的
product_id?如果是这样,答案必须更加努力。 -
好点,但不是 - 如果将同一
id的产品添加到订单中,则应增加qty字段而不是添加另一条记录。
标签: mysql sql opencart query-optimization