안녕하세요, 특정 수의 솔루션(해결)에 대해 배지를 수여하는 템플릿이나 표준 쿼리가 있는지 궁금해서 질문드립니다. 예를 들어, 약 10개의 게시물/질문에 답변을 달고 그 모든 것이 솔루션으로 표시되면, 이에 대한 배지를 받게 되고, 20, 30, 40개의 솔루션이 표시될 때마다 각각 해당하는 배지를 받는 식입니다.
표준 쿼리를 찾아보려고 노력했지만, 그런 것이 없는 것 같습니다. 다만 여기에는 몇 가지 사용자 정의 쿼리가 작성되어 있는 것을 볼 수 있습니다.
플러그인과 함께 제공되는 몇 가지가 있으며, /admin/badges 페이지에서 활성화할 수 있습니다(HelpDesk 및 TechSupport). 수정하고 싶다면 아래 쿼리를 참고하세요:
SELECT p.user_id, p.id post_id, p.updated_at granted_at
FROM badge_posts p
WHERE p.post_number > 1 AND
p.id IN (
SELECT post_id FROM (
SELECT pc.post_id, row_number()
OVER (PARTITION BY p1.user_id ORDER BY pc.created_at) as rnum
FROM post_custom_fields pc
JOIN badge_posts p1 ON p1.id = pc.post_id
JOIN topics t1 ON p1.topic_id = t1.id
WHERE name = 'is_accepted_answer' AND
p1.user_id <> t1.user_id AND
(
:backfill OR
p1.user_id IN (
select user_id from posts where p1.id IN (:post_ids)
)
)
) X WHERE rnum = 1)
SELECT id user_id, current_timestamp granted_at
FROM users
WHERE id IN (
SELECT p1.user_id
FROM post_custom_fields pc
JOIN badge_posts p1 ON p1.id = pc.post_id
JOIN topics t1 ON p1.topic_id = t1.id
WHERE p1.user_id <> t1.user_id AND
name = 'is_accepted_answer' AND
p1.user_id IN (
SELECT user_id
FROM posts
WHERE :backfill OR p1.id IN (:post_ids)
)
GROUP BY p1.user_id
HAVING COUNT(*) > 9
)
걱정 마세요. 데이터 탐색기는 쿼리를 커스텀 SQL 배지로 추가하기 전에 테스트하는 데 정말 좋습니다(다만 데이터 탐색기의 쿼리는 backfill 부분이 필요하지 않아요).
다만, 위 두 번째 쿼리에는 이미 필요한 모든 정보가 포함된 것 같습니다. 해결책은 post_cutom_field 테이블의 name 컬럼에 is_accepted_answer로 저장됩니다. 그리고 그 두 번째 쿼리는 10개의 해결책(HAVING COUNT(*) > 9)에 대해 TechSupport 배지를 부여하므로, OP가 원했던 1위, 2위, 3위 등에게 배지를 부여하려면 해당 쿼리를 복사해서 맨 아래 숫자를 19, 29, 39 등으로 변경하면 됩니다.