MySQL与PHP实现合并同prodid记录并累加quantity的简单方法
简单解决购物车重复商品合并问题
嘿,这个需求真的不用复杂方案!用基础的SQL分组查询就能轻松搞定,分两种场景给你说:
1. 只想查询合并后的结果(不修改原表)
如果只是想看看合并后的状态,直接用GROUP BY配合SUM()函数就行,还能保留最小的cartid,完全符合你要的结果:
SELECT MIN(cartid) AS cartid, prodid, SUM(quantity) AS quantity FROM cart GROUP BY prodid;
解释下:
GROUP BY prodid把相同商品ID的记录归为一组SUM(quantity)自动累加每组的数量MIN(cartid)选每组里最小的购物车ID作为合并后的ID,和你期望的输出一致
2. 要修改原表,让它变成合并后的状态
如果想直接把原表改成合并后的样子,步骤也很简单,分四步走:
-- 1. 先把合并好的数据存到临时表 CREATE TEMP TABLE temp_cart AS SELECT MIN(cartid) AS cartid, prodid, SUM(quantity) AS quantity FROM cart GROUP BY prodid; -- 2. 清空原购物车表(放心,临时表已经存好数据了) TRUNCATE TABLE cart; -- 3. 把合并后的数据插回原表 INSERT INTO cart (cartid, prodid, quantity) SELECT cartid, prodid, quantity FROM temp_cart; -- 4. 加个唯一约束,从根源杜绝重复! ALTER TABLE cart ADD CONSTRAINT unique_prodid UNIQUE (prodid);
这步做完,原表就完全变成你想要的样子了,而且最后加的UNIQUE约束,以后再插入相同prodid的记录会直接报错,再也不用担心重复问题啦。
内容的提问来源于stack exchange,提问作者hachi
相关产品推荐
相关产品推荐

