Mise à jour des Likes dans `user_stats` dans la base de données via SQL

Bonjour à tous !

Existe-t-il un endroit où je pourrais trouver une requête préfabriquée pour mettre à jour likes_given et likes_received dans la table user_stats ? Je ne suis pas sûr de la provenance de cette requête, probablement quelque chose basé sur ce qui se trouve dans les tables user_actions et posts ?

Cela concerne une migration où j’utilise déjà quelques requêtes que j’ai récupérées chez l’un des importateurs, je pense :

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

Cela met à jour les comptes de « J’aime » dans posts et topics, mais pas dans users_stats

Vous devrez le faire dans Rails ou via un plugin. L’explorateur de données ne peut pas modifier les données.

Vous devrez examiner le code des modèles user ou user_stats.

J’utilise DBeaver, je peux exécuter des requêtes UPDATE. J’ai supposé que “Data explorer” n’était qu’un autre client DB équivalent, désolé pour ma confusion. Je suppose que cela ne relève pas de ce forum alors, si un administrateur souhaite séparer ces messages dans un nouveau sujet, ce n’est pas un problème. Je suggère un titre comme Mise à jour des likes dans user_stats via SQL.

J’ai élaboré ce qui suit, mais je ne suis pas sûr qu’ils soient corrects. J’aimerais vérifier en trouvant un endroit où cela a déjà été fait par quelqu’un de plus compétent, mais je n’y arrive pas :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