Aggiornamento dei Like in `user_stats` nel database tramite SQL

Ciao a tutti!

Esiste un posto dove posso trovare una query già pronta per aggiornare likes_given e likes_received nella tabella user_stats? Non sono sicuro da dove dovrebbe provenire, probabilmente qualcosa basato su ciò che si trova nelle tabelle user_actions e posts?

Questo è per una migrazione in cui sto già utilizzando alcune query che ho preso da uno degli importatori, credo:

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

Questo aggiorna i conteggi dei Like in posts e topics, ma non in users_stats

Dovrai farlo in Rails o tramite un plugin. Data Explorer non può modificare i dati.

Dovrai esaminare il codice nei modelli User o User Stats.

Sto usando DBeaver, posso eseguire query UPDATE. Avevo assunto che “Data explorer” fosse solo un altro client DB equivalente, scusa per la confusione. Immagino che questo non appartenga qui, se un amministratore vuole dividere questi post in un thread separato, va bene. Suggerisco un titolo come Aggiornamento dei like in user_stats tramite SQL.

Ho elaborato quanto segue, ma non sono sicuro che siano corretti; mi piacerebbe verificare trovando un posto dove qualcuno più esperto ha già fatto questo, ma non riesco a trovarlo :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