mysql - 如何使用表 B 中的记录计数更新表 A 中的分数列?

标签 mysql sql sql-update

我有一个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/

相关文章:

mysql - SQL更新与where not in

javascript - 存储在 javascript 变量中的 MySQL BigInt 最大值

php - 在 symfony 中,如何设置表单字段的值?

mysql - 在 Visual Studio 2010 中更新触发器

sql - 在 SQL Server 2005 中设置和重置日期格式

mysql - 使用来自另一个表的 MAX() 和 MIN() 更新表 + 性能问题

php - php 中的 PDO SQL 查询不返回任何内容?

MySQL 删除性能

mysql - 如何使用order by优化mysql group by

mysql - 更新sql以仅在日期时间中更改时间