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