SQLを介したデータベース内の`user_stats`でのいいね数の更新

皆さん、こんにちは!

user_stats テーブルの likes_givenlikes_received を更新するための、既成のクエリが見つかる場所はありませんか?それがどこから来るべきかよくわからないのですが、おそらく user_actions テーブルと posts テーブルの内容に基づいたものではないでしょうか?

これは移行処理のためのものです。すでにインポーターの 1 つから取得したいくつかのクエリを使用しているのですが、以下のようなものです:

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 またはプラグインで実装する必要があります。Data Explorer はデータを変更できません。

User モデルまたは User Stats モデルのコードを確認する必要があります。

DBeaver を使用しており、UPDATE クエリを実行できます。「Data explorer」は単に別の DB クライアントだと勘違いしていました。ごめんなさい。これはここには属さないのかもしれません。管理者がこれらの投稿を別のスレッドに分割したい場合、それは構いません。タイトルを Updating likes in user_stats via SQL のようにするのはどうでしょうか。

以下のように考えましたが、正しいかどうか確信が持てません。もっと詳しい誰かがすでにこれを行っている場所を確認したいのですが、見つかりません :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