사용자 그룹별로 토픽 필터링하는 방법

조금 다른 것이 필요하신 것 같습니다. :slight_smile: 모든 포럼은 약간씩 다르므로 솔루션을 조정해야 할 수 있지만, 이 요청은 "‘client’ 그룹의 사용자가 생성하고 ‘team’ 그룹의 사용자가 답변하지 않은 토픽"이라고 설명하겠습니다. 그렇다면 올바른 group_ids로 이 쿼리를 조정하면 원하는 대로 작동해야 합니다:

-- [params]
-- date :start_date = 01/01/2023
-- date :end_date = 01/06/2023

WITH team_replies AS (

SELECT topic_id
FROM posts
WHERE user_id IN (SELECT user_id FROM group_users WHERE group_id = 3) -- 'team' 그룹의 group_id
  AND post_number <> 1
  AND deleted_at ISNULL
  AND post_type = 1
GROUP BY topic_id
)

 
SELECT t.created_at::date,
       t.id AS topic_id,
       MIN(p.id) AS first_post_id
FROM topics t
JOIN posts p ON p.topic_id = t.id
WHERE t.user_id IN (SELECT user_id FROM group_users WHERE group_id = 45) -- 'client' 그룹의 group_id
  AND t.id NOT IN (SELECT topic_id FROM team_replies)
  AND t.created_at BETWEEN :start_date AND :end_date
  AND t.deleted_at ISNULL
  AND t.archetype = 'regular'
GROUP BY t.id
ORDER BY 1 ASC

그룹 이름 대신 group_ids를 아는 경우 이 방식이 더 부드럽게 작동합니다. 그룹 JSON(예: /g/admins.json)에서 이를 찾을 수 있으며, 다음과 같은 간단한 조회를 사용할 수도 있습니다:


-- [params]
-- string :group_name

SELECT name,
       id
FROM groups
WHERE name LIKE LOWER (:group_name)

데이터 탐색기에 쿼리를 복사해서 붙여넣은 첫 번째에는 파라미터 입력 상자를 인식하기 위해 페이지를 새로고침해야 합니다. :+1: