我有一个posts
表和一个likes
表。很多用户都喜欢上帖。 posts
表格具有非规范化likesScore
列,表示帖子的likes
个数。我想在posts.likesScore
表COUNT(*)
上执行likes
更新@postId
表。
我知道如何做到这一点,但我无法正确理解语法:
UPDATE posts
SET likesScore = ...
WHERE posts.id = @postId
答案 0 :(得分:2)
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子句中的子查询和过滤中进行关联 - 否则存在更新支持表中没有引用的记录的风险
我不希望使用视图将计数存储在表中,因为每次在这种情况下生成LIKE时,计数与数据不同步的风险很大。
答案 1 :(得分:1)
UPDATE posts
SET likesScore = (SELECT count(*) FROM likes WHERE likes.id=posts.id)
WHERE ...