# 해답 생성 횟수 배지는 어떻게 되나요?

**URL:** <https://meta.discourse.org/t/badges-for-x-number-of-solutions-created/229170>\
**Category:** Data & reporting\
**Tags:** solved, sql-triggered-badge\
**Created:** [6월 6, 2022, 3:49오후 UTC](https://meta.discourse.org/t/badges-for-x-number-of-solutions-created/229170 "2022-06-06T15:49:54Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Kyle\_Pollock](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/kyle_pollock/32/262774_2.png) [@Kyle\_Pollock](https://meta.discourse.org/u/Kyle_Pollock)\
**Post date:** [6월 6, 2022, 3:49오후 UTC](https://meta.discourse.org/t/badges-for-x-number-of-solutions-created/229170/1 "2022-06-06T15:49:54Z")

</div>

안녕하세요, 특정 수의 솔루션(해결)에 대해 배지를 수여하는 **템플릿이나 표준 쿼리가 있는지** 궁금해서 질문드립니다. 예를 들어, 약 10개의 게시물/질문에 답변을 달고 그 모든 것이 솔루션으로 표시되면, 이에 대한 배지를 받게 되고, 20, 30, 40개의 솔루션이 표시될 때마다 각각 해당하는 배지를 받는 식입니다.

표준 쿼리를 찾아보려고 노력했지만, 그런 것이 없는 것 같습니다. 다만 여기에는 몇 가지 사용자 정의 쿼리가 작성되어 있는 것을 볼 수 있습니다.

> [@Some common badge queries](https://meta.discourse.org/t/some-common-badge-queries-idea/31859):
>
> warning Enabling Badge SQL entails security and performance risks so it is not available by default. For more information, see: [Enable Badge SQL](https://meta.discourse.org/t/badge-sql-can-no-longer-be-edited-by-default/47894) Here are some common badge queries which you can use to create your own awesome badge! Grant a badge if user has created at least one topic in the “foo”\* category \*(“foo” is the category name, not the category slug) 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 cate…

감사합니다,

---

<div class="post-metadata">

**Author:** ![JammyDodger](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jammydodger/32/254611_2.png) [@JammyDodger](https://meta.discourse.org/u/JammyDodger)\
**Post date:** [6월 6, 2022, 3:58오후 UTC](https://meta.discourse.org/t/badges-for-x-number-of-solutions-created/229170/2 "2022-06-06T15:58:24Z")

</div>

플러그인과 함께 제공되는 몇 가지가 있으며, `/admin/badges` 페이지에서 활성화할 수 있습니다(HelpDesk 및 TechSupport). 수정하고 싶다면 아래 쿼리를 참고하세요:

```plaintext
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)

```

```plaintext

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
)

```

---

<div class="post-metadata">

**Author:** ![Kyle\_Pollock](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/kyle_pollock/32/262774_2.png) [@Kyle\_Pollock](https://meta.discourse.org/u/Kyle_Pollock)\
**Post date:** [6월 6, 2022, 6:05오후 UTC](https://meta.discourse.org/t/badges-for-x-number-of-solutions-created/229170/3 "2022-06-06T18:05:46Z")

</div>

감사합니다, @JammyDodger,

조금 더 도움이 필요할 것 같습니다. 솔루션에 사용되는 선택자/필드를 식별하는 문서가 있으신가요?

![Screen Shot 2022-06-06 at 11.05.29 AM](https://global.discourse-cdn.com/meta/original/4X/c/1/9/c19b6778b1c31a983e800c4f20f022ddbc5e046b.png)

---

<div class="post-metadata">

**Author:** ![JammyDodger](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jammydodger/32/254611_2.png) [@JammyDodger](https://meta.discourse.org/u/JammyDodger)\
**Post date:** [6월 6, 2022, 6:48오후 UTC](https://meta.discourse.org/t/badges-for-x-number-of-solutions-created/229170/4 "2022-06-06T18:48:22Z")

</div>

걱정 마세요. 🙂 [데이터 탐색기](https://meta.discourse.org/t/discourse-data-explorer/32566)는 쿼리를 [커스텀 SQL 배지](https://meta.discourse.org/t/triggered-custom-badge-queries/19336)로 추가하기 전에 테스트하는 데 정말 좋습니다(다만 데이터 탐색기의 쿼리는 `backfill` 부분이 필요하지 않아요).

다만, 위 두 번째 쿼리에는 이미 필요한 모든 정보가 포함된 것 같습니다. 해결책은 `post_cutom_field` 테이블의 `name` 컬럼에 `is_accepted_answer`로 저장됩니다. 그리고 그 두 번째 쿼리는 10개의 해결책(`HAVING COUNT(*) > 9`)에 대해 TechSupport 배지를 부여하므로, OP가 원했던 1위, 2위, 3위 등에게 배지를 부여하려면 해당 쿼리를 복사해서 맨 아래 숫자를 19, 29, 39 등으로 변경하면 됩니다.
