Есть ли где-то готовый запрос для обновления likes_given и likes_received в таблице user_stats? Не уверен, откуда это должно браться; вероятно, что-то на основе данных из таблиц user_actions и posts?
Это нужно для миграции, где я уже использую несколько запросов, которые, кажется, взял из одного из импортеров:
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
Это обновляет количество лайков в posts и topics, но не в user_stats…
Я использую DBeaver, там можно выполнять запросы UPDATE. Я предположил, что «Data explorer» — это просто ещё один эквивалентный клиент для БД, извините за путаницу. Похоже, это не совсем сюда, если администратор захочет разделить эти сообщения в отдельную тему, это нормально. Предлагаю заголовок вроде Обновление likes в user_stats через SQL.
Я придумал следующее, но не уверен, что всё верно. Мне бы хотелось проверить это, найдя где-то решение, которое уже кто-то более сведущий реализовал, но я не могу этого найти
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