通过 SQL 在数据库中更新 `user_stats` 中的点赞数

大家好!

有没有现成的查询语句可以用来更新 user_stats 表中的 likes_givenlikes_received?我不确定应该从哪里获取这些数据,可能是基于 user_actionsposts 表中的内容?

这是用于一次迁移,我已经在使用从某个导入器中获取的几个查询语句了,我想:

UPDATE posts SET like_count = coalesce(cnt,0)
    FROM (
	SELECT post_id, count(*) cnt
	FROM post_actions
	WHERE post_action_type_id = 2 AND deleted_at IS NULL
	GROUP BY post_id
) x
WHERE posts.like_count <> x.cnt AND posts.id = x.post_id
UPDATE topics SET like_count = coalesce(cnt,0)
  FROM (
	SELECT topic_id, sum(like_count) cnt
	FROM posts
	WHERE deleted_at IS NULL
	GROUP BY topic_id
  ) x
WHERE topics.like_count <> x.cnt AND topics.id = x.topic_id

这更新了 poststopics 中的点赞计数,但没有更新 user_stats 表中的计数……

你需要在 Rails 或插件中实现。数据浏览器无法修改数据。

你需要查看用户模型或用户统计模型中的代码。

我正在使用 DBeaver,可以使用 UPDATE 查询。我原以为“数据浏览器”只是另一个等效的数据库客户端,抱歉我之前的误解。我想这个问题确实不属于这里,如果有管理员愿意将这些帖子拆分到一个新线程中,那也没问题。我建议标题可以定为 通过 SQL 更新 user_stats 中的点赞数

我构思了以下方案,但不确定是否正确。我很希望能找到某位更专业的人已经实现过类似方案的地方进行核对,可惜我找不到 :slightly_frowning_face:

UPDATE user_stats SET likes_given = coalesce(cnt,0)
    FROM (
   SELECT user_id, count(*) cnt
   FROM post_actions
   WHERE post_action_type_id = 2 AND deleted_at IS NULL
   GROUP BY user_id
) x
WHERE user_stats.likes_given <> x.cnt 
         AND user_stats.user_id = x.user_id
UPDATE user_stats SET likes_received = coalesce(cnt,0)
     FROM (
	SELECT posts.user_id, SUM(posts.like_count) cnt
	FROM post_actions
	LEFT JOIN posts ON post_actions.post_id = posts.id
	WHERE post_action_type_id = 2 AND post_actions.deleted_at IS NULL
	GROUP BY posts.user_id
) x
WHERE user_stats.likes_received <> x.cnt 
       AND user_stats.user_id = x.user_id