多进程swoole批量更新之case when坑

69 篇文章 0 订阅

有个需求是通过货号;去csv批量导入去更新某个客户的库存表数据(真实库存等信息核心表);因为涉及到表比较大;使用了多进程swoole来实现,再结合需求进行case when过滤操作;如果客户有多个门店某个字段不填写某人不修改之前的字段信息。

然后就出现了很神奇的一幕。按道理来说:为啥2317828172 stock会被改掉呢?全部stock都被改成了0;打印日志发现。执行的sql为

UPDATE `xcxmall_inventory` SET `stock` = CASE goods_no  WHEN '64837483' THEN 0 WHEN '434728392' THEN 0 WHEN '5674232' THEN 0 END,  `status` = CASE goods_no WHEN '64837483' THEN 0 WHEN '434728392' THEN 0 WHEN '2317828172' THEN 0 WHEN '5674232' THEN 0 END,  `price` = CASE goods_no WHEN '64837483' THEN 0.1 WHEN '434728392' THEN 0.2 WHEN '2317828172' THEN 0.3 WHEN '5674232' THEN 0.4 END  WHERE `goods_no` IN ('64837483','434728392','5674232','2317828172') AND store_id=6

思来想去问题出现在哪呢?我明明2317828172的stock没有WHEN XXTHEN的呀?后面得到了好朋友的指点,发现了操!如果不存在where后面的2317828172会被WHEN THEN 之后的ELSE也就是false替换入库也就是0入库 了!!改造sql:加else为原字段!

UPDATE `xcxmall_inventory` SET `stock` = CASE goods_no  WHEN '64837483' THEN 1 WHEN '434728392' THEN 1 WHEN '5674232' THEN 1 ELSE `stock` END,  `status` = CASE goods_no WHEN '64837483' THEN 0 WHEN '434728392' THEN 0 WHEN '2317828172' THEN 0 WHEN '5674232' THEN 0 ELSE `status` END,  `price` = CASE goods_no WHEN '64837483' THEN 0.1 WHEN '434728392' THEN 0.2 WHEN '2317828172' THEN 0.3 WHEN '5674232' THEN 0.4 ELSE `price` END  WHERE `goods_no` IN ('64837483','434728392','5674232','2317828172') AND store_id=6

顺便记录下when多个条件then


SELECT r.id,r.user_id ,u.nickname, CASE r.type 
WHEN 0 THEN '其他类型' 
WHEN 1 THEN '商城签到' 
WHEN 2 THEN '购物抵扣'
WHEN 3 THEN '平台调整'
WHEN 4 THEN '订单退还'
WHEN 5 THEN '购物赠送'
WHEN 6 THEN '积分兑换'
WHEN 10 THEN '积分兑换'
WHEN 7 THEN '抽奖消费'
WHEN 8 THEN '线下平台同步' //不要想着用in没效果的!
WHEN 20 THEN '线下平台同步' //
WHEN 11 THEN '积分兑换'
WHEN 12 THEN '订单退还'
WHEN 17 THEN '抽奖消费'
END,
r.integral, FROM_UNIXTIME(r.addtime,'%Y-%m-%d %H:%i') addtime FROM `xcxmall_register` r LEFT JOIN xcxmall_user u on r.user_id=u.id  WHERE (r.`store_id`=100) AND (r.`integral` <> 0)  AND r.user_id=803208;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值