我有一个评论表和一个帖子表
每当删除帖子时,查询都会运行以从每个用户的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
迭代这两个结果,每次减去?
有人可以解释我错过了什么吗?谢谢
答案 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可能是个更好的主意......