MySQL在更新中为同一行减去多次

时间:2010-11-02 04:34:23

标签: mysql sql sql-update

我有一个评论表和一个帖子表

每当删除帖子时,查询都会运行以从每个用户的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 个答案:

答案 0 :(得分: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

当你可以执行一次操作时,依靠两条记录减去两次是毫无意义的。

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

相关问题