gpt4 book ai didi

mysql - 使用事件调度程序更新多行

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

我有这样的情况,我有付款历史,如果1天后状态仍在等待付款,库存将根据购买的产品数量恢复到初始值。我有这样的查询

> CREATE EVENT `stok_sch` ON SCHEDULE
> EVERY 1 SECOND
> DO BEGIN
> UPDATE product a
> SET a.stock = a.stock +
> (select ifnull((select sum(amount) from order_detail x left join order y using (idOrder)
> where y.status='Waiting for payment' and x.idProduct=a.idProduct
> and (date_format(y.order_date,'%Y%m%d')+1 = date_format(now(),'%Y%m%d')+0 or date_format
> (y.order_date,'%Y%m%d')+1 < date_format(now(),'%Y%m%d')+0) group by x.idProduct),0));
>
> UPDATE order set status ='Cancel' where status ='Waiting for payment' and (date_format(order_date,'%Y%m%d')+1 < date_format
>
> (now(),'%Y%m%d')+0 OR date_format(order_date,'%Y%m%d')+1 = date_format(now(),'%Y%m%d')+0);
> END$$;

我已经更新了我的查询,如果我在没有事件计划的情况下运行它,它可以正常工作,但是当我将它与事件计划程序结合起来时,产品库存更新为购买量的两倍。有什么想法可以解决这个问题吗?

最佳答案

您可以尝试两件事:

1) 将 LEFT JOIN 替换为 JOIN,以便您仅获得实际订单。

2) 不要在 SET stock = stock + ( ...) 部分的子查询中引用 ab.amount。改为引用 x.amount:

查询现在将如下所示:

UPDATE product AS a, product_detail AS ab, order AS b
SET stock=a.stock +
(select sum(x.amount) as amount
from product_detail x
join order y using (idOrder)
where y.status='waiting for payment'
and x.idProduct = a.idProduct
group by x.idProduct
)
WHERE a.idProduct=ab.idProduct
AND ab.idOrder=b.idOrder
AND b.status='waiting for payment'
and (date_format(order_date,'%Y%m%d')+1 = date_format(now(),'%Y%m%d')+0 or date_format(order_date,'%Y%m%d')+1 < date_format(now(),'%Y%m%d')+0)
;

关于mysql - 使用事件调度程序更新多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26200298/

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