我有一个posts
表和一个likes
表。许多用户可以喜欢帖子。 posts
表有一个非规范化的 likesScore
列,表示帖子的 likes
数。我想通过在 likes
表 @postId
上执行 COUNT(*)
来更新 posts.likesScore
表>.
我知道如何去做,但我无法正确使用语法:
UPDATE posts
SET likesScore = ...
WHERE posts.id = @postId
最佳答案
MySQL UPDATE statements support JOINs - 使用:
UPDATE POSTS p
JOIN (SELECT t.postid,
COUNT(*) AS cnt
FROM LIKES t
GROUP BY t.postid) l ON l.postid = p.postid
SET likesscore = l.cnt
标准方法是使用子查询,但这需要在 WHERE 子句中的子查询和过滤中进行关联——否则存在更新支持表中没有引用的记录的风险.
我不喜欢使用 View 将计数存储在表中,因为在这种情况下每次进行 LIKE 时,计数与数据不同步的风险很大。
关于mysql - 如何使用表 B 中的记录计数更新表 A 中的分数列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4819008/