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…
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
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