2016-02-27 60 views
1

检测到 'X' 时添加到一个值我有两个表在MySQL

测试1:

id: 1 
name: apple 
count: 0 

id: 2 
name: pear 
count: 0 

测试2:

id: 1 
liked: yes 
itemid: 1 

id: 2 
liked: yes 
itemid: 1 

id: 3 
liked: yes 
itemid: 2 

每次test2.itemid比赛test1.id我想补充1到test1.count。在上述情况下,苹果将有2

我曾尝试下面的查询计数,

UPDATE test1 
LEFT JOIN 
     test2 
ON  test2.`itemid` = test1.`id` 
SET  test1.`count` = test1.`count` + 1 
WHERE test2.`liked` = 'yes'; 

和发生这种情况:

测试1:

id: 1 
name: apple 
count: 1 

id: 2 
name: pear 
count: 1 

正如你可以看到它没有正常工作。我猜测它只是在test1中为每一行运行一次。有任何想法吗?

回答

2
UPDATE test1 t1 
    SET `count` = (SELECT COUNT(*) 
        FROM test2 t2 
        WHERE t1.id = t2.itemid 
        AND liked = 'yes'); 
1

我想总结test2的值,然后添加。另外请注意,如果你只在test2与“喜欢”关心test1行,这是一个内部联接:

UPDATE test1 
INNER JOIN (
    SELECT itemid, COUNT(*) AS valueToAdd 
    FROM test2 
    WHERE liked = 'yes' 
    GROUP BY itemid) test2Counts 
ON test1.id = test2Counts.itemid 
SET test1.`count` = test1.`count` + test2Counts.valueToAdd; 
+0

这个伟大的工程,我个人更喜欢使用奥利的答案,由于简单。感谢内部加入提示也不知道:P –

+1

没问题 - 我也很喜欢Olli的简单答案。如果你有一个非常大的数据集,那么考虑我的;机会会更快一些(在'test1'中每扫描一次'test2',而不是每次扫描一次),但是如果数据集相对较小,则无需为了可读性而交换速度。 –