Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 合并具有相同id的sql行,求和并更新总数_Php_Mysql - Fatal编程技术网

Php 合并具有相同id的sql行,求和并更新总数

Php 合并具有相同id的sql行,求和并更新总数,php,mysql,Php,Mysql,我试图编写一个php脚本来比较数据库中的行,然后添加产品id匹配的数量。基于cusotmer_id 例如: mydb.cart id, customer_id, cart_id, product_id, qty, price 1, 0001000, 4545453, 20, 10, 12.99 2, 0001000, 7473432, 20, 2, 12.99 Result 3, 0001000, 7473432, 20, 12, 25.98 正在尝试合并上一个会话中的购物车信息 如有任何

我试图编写一个php脚本来比较数据库中的行,然后添加产品id匹配的数量。基于cusotmer_id

例如:

mydb.cart

id, customer_id, cart_id, product_id, qty, price

1, 0001000, 4545453, 20, 10, 12.99
2, 0001000, 7473432, 20, 2, 12.99

Result
3, 0001000, 7473432, 20, 12, 25.98
正在尝试合并上一个会话中的购物车信息

如有任何建议,我们将不胜感激


谢谢

您可以用SQL而不是PHP来完成这项工作。更新新的购物车行并删除旧的购物车行。不确定这是否是正确的MySQL语法,但应该如下所示:

UPDATE cart SET qty = (
    SELECT SUM(qty) FROM cart c WHERE c.id = id 
    GROUP BY c.customer_id, c.product_id)
  WHERE EXISTS (
    SELECT 'x' FROM cart c2 
    WHERE c1.customer_id = c2.customer_id
    AND c1.product_id = c2.product_id
    AND c1.id < id);

DELETE FROM cart c1 WHERE EXISTS (
    SELECT 'x' FROM cart c2 
    WHERE c1.customer_id = c2.customer_id
    AND c1.product_id = c2.product_id
    AND c1.id < id);
UPDATE cart SET qty = (
    SELECT SUM(qty) FROM cart c WHERE c.id = id 
    GROUP BY c.customer_id, c.product_id)
  WHERE EXISTS (
    SELECT 'x' FROM cart c2 
    WHERE c1.customer_id = c2.customer_id
    AND c1.product_id = c2.product_id
    AND c1.id < id);

DELETE FROM cart c1 WHERE EXISTS (
    SELECT 'x' FROM cart c2 
    WHERE c1.customer_id = c2.customer_id
    AND c1.product_id = c2.product_id
    AND c1.id < id);