2010-11-02 45 views
0

我的意见表和岗位的MySQL减去同一行中多次更新

每当一个帖子被删除的表,查询运行减去的评论的数量从每个(这些后来被删除)用户COMMENT_COUNT

因此,如果用户有在后2个评论,而后期被删除,它们的资产负债应该有2个从它

我查询减去如下:

UPDATE users 
INNER JOIN comment ON users.id = comment.author 
     SET comment_count = comment_count - 1 
    WHERE comment.post = 1 

用户A拥有2条评论与.POST = 1,但出于某种原因,用户只有得到COMMENT_COUNT减去1次,当它应该发生两次

我想我的语法是正确的,因为当我:

SELECT * 
     FROM users 
INNER JOIN comment ON users.id = comment.author 
    WHERE comment.post = 1 

我得到两个结果用户A

不宜UPDATE超过两种结果迭代,每次减去?

有人可以解释我失踪了吗?谢谢

回答

1

如果你打算将计,使用:

UPDATE USERS 
    SET comment_count = (SELECT COUNT(*) 
          FROM COMMENT c 
         WHERE c.author = USERS.id) 

...或:当

UPDATE USERS u 
    JOIN (SELECT c.author, 
       COUNT(*) AS numComments 
      FROM COMMENT c 
     GROUP BY c.author) x ON x.author = u.id 
    SET comment_count = x.numComments 

有没有点在依靠两个记录减去两倍,你可以执行一次操作。

我不喜欢存储这样的值,因为它们可以根据记录进行计算,而无需保持计数同步的麻烦。 A view可能是一个更好的主意......

+0

+1好答案,不知道确切的MySQL语法,所以我等你回答X-) – 2010-11-02 04:45:49

+0

也可以通过触发器维护它们。顺便说一句,实时“COUNT(*)”几乎总是很昂贵的(即当你需要“按评论排序” - 获得最受欢迎的出版物)。 – zerkms 2010-11-02 04:46:57

+0

@zerkms:我尝试不使用触发器,如果​​我不需要,MySQL旁边的不可能:) – 2010-11-02 04:50:09