# 특정 카테고리의 최근 플래그 개수 가져오기

**URL:** https://meta.discourse.org/t/get-count-of-recent-flags-in-a-particular-category/260411
**Category:** Data & reporting
**Tags:** sql-query
**Created:** [4월 3, 2023, 5:01오후 UTC](https://meta.discourse.org/t/get-count-of-recent-flags-in-a-particular-category/260411 "2023-04-03T17:01:27Z")
**Posts on this page:** 5
**Page:** 1

<div class="post-metadata">

### Author: ![tpsReports](https://avatars.discourse-cdn.com/v4/letter/t/8797f3/32.png) [@tpsReports](https://meta.discourse.org/u/tpsReports)
#### Post date: [4월 3, 2023, 5:01오후 UTC](https://meta.discourse.org/t/get-count-of-recent-flags-in-a-particular-category/260411/1 "2023-04-03T17:01:27Z")

</div>

안녕하세요, 여러분 😀

저는 Discourse 인스턴스에 플러그인을 추가하는 작업을 하고 있습니다. 이 플러그인은 특정 카테고리에서 최근 특정 수의 플래그가 생성되었는지 여부를 판단하는 것입니다. 이상적으로는 시간 범위(예: ID가 X인 카테고리에서 지난 20분 동안의 플래그 수) 동안 해당 카테고리에서 생성된 플래그의 개수를 반환해야 합니다.

현재 [Data Explorer](https://meta.discourse.org/t/32566?silent=true) 플러그인을 활용해 보고 있지만, SQL에 익숙하지 않아 제가 하려는 것이 가능한지 확신이 서지 않습니다. post\_actions 테이블에는 post\_id가 저장되어 있으므로 게시글 단위로 이 작업을 수행할 수 있을 것 같습니다. 하지만 카테고리 내 개별 게시글의 플래그 수를 수동으로 합산하는 대신, 하나의 쿼리로 이를 해결하는 것이 이상적입니다.

도움을 주실 수 있는 분이 계시다면 감사하겠습니다!

---

<div class="post-metadata">

### Author: ![southpaw](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/southpaw/32/79352_2.png) [@southpaw](https://meta.discourse.org/u/southpaw)
#### Post date: [4월 3, 2023, 7:58오후 UTC](https://meta.discourse.org/t/get-count-of-recent-flags-in-a-particular-category/260411/2 "2023-04-03T19:58:55Z")

</div>

Hi @tpsReports,

제가 충분히 테스트할 수 있는 안정된 Discourse 인스턴스가 없어서 완벽하게 확인해 보지는 못했지만, 이 [Data Explorer](https://meta.discourse.org/t/32566?silent=true) 쿼리가 올바른 방향으로 나아가는 데 도움이 될 것 같습니다. (다른 누군가가 이를 더 깔끔하게 다듬어 줄 수도 있겠죠!)

```plaintext
SELECT count(*)
FROM post_actions AS pac
JOIN posts p on p.id = pac.post_id
JOIN topics t on t.id = p.topic_id
WHERE pac.post_action_type_id in ('3','4','7','8')
AND pac.created_at >= NOW() - INTERVAL '20 MINUTE'
AND t.category_id = '4'

```

이 예시에서는 플래그가 생성된 지 20분(6번째 줄)으로 지정했는데, 이는 질문자님이 예시로 제시하신 값이기 때문입니다.  
7번째 줄에서는 카테고리 ID로 4를 사용했지만, 추적하려는 카테고리의 특정 카테고리 ID를 사용해야 합니다.

카테고리 이름으로 참조하고 싶다면 쿼리에 다른 조인(join)을 추가하여 다음과 같이 만들 수 있습니다:

```plaintext
SELECT count(*)
FROM post_actions AS pac
JOIN posts p on p.id = pac.post_id
JOIN topics t on t.id = p.topic_id
JOIN categories c on c.id = t.category_id
WHERE pac.post_action_type_id in ('3','4','7','8')
AND pac.created_at >= NOW() - INTERVAL '20 MINUTE'
AND c.name = 'General'

```

그리고 8번째 줄에서 `General`이라고 쓴 부분을 내 카테고리 이름으로 교체하세요. 카테고리 이름은 대소문자를 구분한다는 점을 명심하세요.

도움이 되었는지 알려주세요!

---

<div class="post-metadata">

### Author: ![Arkshine](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/arkshine/32/298682_2.png) [@Arkshine](https://meta.discourse.org/u/Arkshine)
#### Post date: [4월 3, 2023, 8:23오후 UTC](https://meta.discourse.org/t/get-count-of-recent-flags-in-a-particular-category/260411/3 "2023-04-03T20:23:27Z")

</div>

@southpaw 제가 먼저 올리려던 참이었어요 😄

관심 있으시면 채울 수 있는 커스텀 필드를 추가했어요:

```sql
--[params]
-- int_list :category_ids
-- text :interval = 20min

SELECT t.category_id, count(pa.id) count
from post_actions pa
INNER JOIN posts p on p.id = pa.post_id
INNER JOIN topics t on t.id = p.topic_id
WHERE post_action_type_id in (3, 4, 6, 7, 8)
    AND t.category_id in (:category_ids)
    AND pa.created_at >= now() - interval :interval
GROUP BY t.category_id

```

여러 카테고리 ID와 커스텀 간격(예: 1h, 30 min, 3 months 등)을 입력할 수 있습니다.

 ![image](https://global.discourse-cdn.com/meta/original/4X/a/7/0/a70ac308e8e8e973280eaa2a25cb87d46da73059.png)

참고: `the post_action_type_id` 6은 사용자가 경고를 받는 것과 관련이 있다고 생각해서 그대로 두었습니다. 이것도 카운트에 포함할지 확실하지 않으니, 원치 않으시면 삭제해도 됩니다.

---

<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: [4월 3, 2023, 8:44오후 UTC](https://meta.discourse.org/t/get-count-of-recent-flags-in-a-particular-category/260411/4 "2023-04-03T20:44:06Z")

</div>

> [@Arkshine](#):
>
> 참고: `the post_action_type_id`를 6으로 유지했는데, 이것이 사용자가 경고(warning)를 받는 것과 관련이 있다고 생각합니다. 이 부분도 함께 카운팅을 원하시는지 확신이 서지 않습니다. 원치 않으시면 자유롭게 삭제해 주세요.

참고로 6은 '사용자 알림(Notify User)'으로, 플래깅 메뉴에서 시작되는 사용자 간 개인 메시지(PM)에 사용되는 항목입니다. 👍

 ![image](https://global.discourse-cdn.com/meta/original/4X/1/7/4/174174f555f47dcca70a59bb890bc54cabc5d5c8.png)

다만, 관리자가 이를 공식 경고(offiical warning)로 표시하는 것도 가능합니다.

---

<div class="post-metadata">

### Author: ![system](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/system/32/443519_2.png) [@system](https://meta.discourse.org/u/system)
#### Post date: [5월 3, 2023, 8:44오후 UTC](https://meta.discourse.org/t/get-count-of-recent-flags-in-a-particular-category/260411/5 "2023-05-03T20:44:17Z")

</div>

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.
