우리 커뮤니티는 고정된 주제와 전역 고정된 주제 중심으로 운영됩니다. 불행히도 사용자 프로필 페이지에는 이에 대한 통계가 전혀 제공되지 않으며, 데이터베이스 어디에도 고정/전역 고정이 체계적으로 저장되어 있지 않은 것으로 보입니다.
이러한 상황을 고려하여, 최소한 ‘첫 고정’, ‘10회 고정’, ‘100회 고정’ 및 전역 고정 주제에 대해 배지를 부여할 수 있는 방법을 찾고 있습니다.
이러한 유형의 배지를 위한 배지 SQL 쿼리에 대해 도움을 주실 수 있으신가요?
제 출발점:
SELECT p.user_id, min(p.created_at) granted_at, MIN(p.id) post_id
FROM badge_posts p
JOIN topics t ON t.id = p.topic_id
WHERE t.unpinned IS NOT NULL
GROUP BY p.user_id
HAVING count(*) > 5
하지만 이 쿼리는 다음과 같은 오류를 반환합니다:
ERROR: column t.unpinned does not exist
LINE 6: WHERE t.unpinned IS NOT NULL
제가 아는 한, 한때 고정되었던 주제와 함께 유지되는 다른 데이터 포인트가 없으므로 unpinned을 사용해야 하는 것 같습니다. 아니면 여기서 post_actions를 사용할 수 있을까요?
아니면 "pinned … ago"를 포함하는 스태프/시스템 사용자의 주제 내 첫 번째 게시물을 검색하여 기준으로 삼을 수도 있을까요? action_code => pinned.disabled
업데이트: 이 쿼리가 어떻게 작동하는 것 같습니다…
SELECT t.user_id, current_timestamp granted_at
FROM badge_posts p
INNER JOIN topics t on t.id = p.topic_id
WHERE p.action_code ilike 'pinned.disabled'
GROUP BY t.user_id
HAVING count(*) > 0
하지만 이것이 최선의 접근 방식인지 확신이 서지 않으며, 게시물이 여러 번 고정되고 해제될 수 있으므로… 이 쿼리가 각 topic.id당 pinned.disabled를 하나만 포착하는지 확실하지 않습니다.
배지 SQL 전문가의 도움이 있다면 감사하겠습니다.
또는 향후 “좋아요” 등과 같이 고정 상태를 데이터베이스에 체계적으로 저장하고, 사용자 프로필의 Stats 섹션 및 그 아래에 “GOT PINNED” 링크와 함께 표시하는 것도 고려해 볼 수 있습니다. 주제가 고정되면 좋아요에 비해 훨씬 더 큰 인정으로 간주되어야 하므로, 이를 반영해야 하기 때문입니다.
