更新订单内多个商品的数量---在存在相同商品id时。

//修改商品售出数量
数据库表存储时,一个订单多个商品,是按照商品ID存储,会出现相同商品多条记录,直接update使用where id in(),出现相同商品id时只执行一次更新。
$order_id = $order['id'];
//根据订单id查询商品ID和该商品在订单中的购买数量
$re = M()->query("SELECT gid,count(gid) AS count FROM zb_order_detail WHERE oid=$order_id GROUP BY gid");

//将$re拼装为 array(商品id=>该商品购买数量,
......
)
foreach($re as $v){
$res[$v['gid']] = $v['count'];
}
//取出商品id,为(id1,id2...).作为in条件
$ids = implode(',', array_keys($res));
//当商品id 则 商品数量
$sql = "UPDATE zb_goods SET sale_count = CASE id ";
//使用case when 语句,循环拼接条件
foreach ($res as $id => $count) {
$sql .= sprintf("WHEN %d THEN sale_count+%d ", $id, $count);
}
$sql .= "END WHERE id IN ($ids)";
M()->execute($sql);

最后sql语句形为:UPDATE zb_goods SET sale_count = CASE id
when id1 then sale_count+count1
when id2 then sale_count+count2
........
END WHERE id IN (id1,id2...);

实现订单中多个相同商品数量的更新。

猜你喜欢

转载自blog.csdn.net/qq_36103520/article/details/53444455