在MySQL数据库中,用户有3个字段分配给他:
USER_ID meta_key meta_value
user_id = '297'
meta_key = 'qty'
meta_value = '1'
问题是,当这个用户,比如购买另一个产品时,它错误地添加了另一个 3个字段:
user_id = '297'
meta_key = 'qty'
meta_value = '1'
而不是仅仅将增量值更新为'qty'为'2'。 所以我的数据库中填充了3或4个重复的条目,每个条目的qty值为1,而不是一个具有所有qty的总和的字段。
我已经修复了导致此错误的错误,但我现在也需要修复数据库。
结构图:http://i.imgur.com/41Qk07f.png
我想知道是否有一个查询将所有重复的'qty'值合并为一个。
答案 0 :(得分:0)
这样做:
UPDATE theTable t
JOIN (SELECT user_id, meta_key, SUM(meta_value) meta_value_sum
FROM theTable
GROUP BY user_id, meta_key) t1
ON t.user_id = t1.user_id AND t.meta_key = t1.meta_key
SET t1.meta_value = meta_value_sum
然后删除所有重复记录:
ALTER TABLE IGNORE theTable ADD UNIQUE INDEX (user_id, meta_key)
答案 1 :(得分:0)
meta_value
s SELECT SUM(meta_value) FROM t1 WHERE meta_key = 'qty'
GROUP BY user_id
然后,您可以删除所有qty
行,并使用正确的求和值再次插入这些行。
将user_id
,meta_key
设为UNIQUE KEY
。然后,您可以使用此查询来更新总和:
INSERT INTO t1 VALUES (297, 'qty', 1)
ON DUPLICATE KEY UPDATE meta_value = meta_value + 1