gpt4 book ai didi

MySQL Get products also bought with a product/Optimise IN 查询

转载 作者:行者123 更新时间:2023-11-29 05:11:18 25 4
gpt4 key购买 nike

我正在尝试编写一个简单的“购买此商品的客户还购买了...”

我有一个 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 和几千个列表。

我想知道是否有人可以指出我以更优化的方式编写它的方向。

非常感谢任何帮助。

最佳答案

你可以尝试改变这个:

select p1.product_id, p1.count(*) as cnt

select p1.product_id, count(distinct p1.order_id) as cnt 

看看这是否会给你带来任何不同的结果

编辑:来自评论

如果您希望在第一个查询中获得您生成的结果,您可以尝试使用这个:

select a.product_id, count(*) as cnt 
from order_product a
join (select distinct order_id from order_product where product_id = 155) b on (a.order_id = b.order_id)
where a.product_id != 155
group by a.product_id
order by cnt desc
limit 5;

对现有查询的小改动 :)

关于MySQL Get products also bought with a product/Optimise IN 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39035626/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com