user_stats 테이블에서 likes_given와 likes_received를 업데이트하기 위해 사용할 수 있는 미리 작성된 쿼리를 찾을 수 있는 곳이 있을까요? 이 값이 어디서 가져와야 하는지 확실하지 않은데, 아마도 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
저는 DBeaver를 사용 중이며 UPDATE 쿼리를 사용할 수 있습니다. "Data explorer"가 또 다른 동등한 DB 클라이언트라고 생각했는데, 혼동을 드려 죄송합니다. 그렇다면 이 내용은 여기에는 맞지 않는 것 같습니다. 관리자가 이 게시글들을 별도의 스레드로 분리하고 싶으시다면 그렇게 하셔도 괜찮습니다. SQL을 통한 user_stats의 좋아요 업데이트와 같은 제목을 제안합니다.
아래와 같은 쿼리를 작성해 보았지만, 이것이 올바른지 확신이 서지 않습니다. 더 잘 아시는 누군가가 이미 작성해 둔 예시를 찾아서 확인하고 싶지만, 어디에서도 찾을 수 없습니다
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