将多个条目的值汇总到一个字段中

时间:2013-10-15 18:53:25

标签: mysql

在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'值合并为一个。

2 个答案:

答案 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行,并使用正确的求和值再次插入这些行。

Upsert query

user_idmeta_key设为UNIQUE KEY。然后,您可以使用此查询来更新总和:

INSERT INTO t1 VALUES (297, 'qty', 1)
ON DUPLICATE KEY UPDATE meta_value = meta_value + 1