이메일 주소가 있는 행사 초대 대상자 목록 보기

:bookmark: 이는 특정 이벤트에 참석을 응답(RSVP)한 모든 사용자의 목록과 그들의 기본 이메일 주소를 가져오는 Data Explorer SQL 쿼리입니다. 후속 조치, 알림 또는 외부 통신을 위해 참석자 연락처 정보가 필요한 이벤트 담당자에게 유용합니다.

:person_raising_hand: 필요한 사용자 권한: 관리자(Administrator)

:discourse2: 이 쿼리를 실행하려면 Calendar (and Event) 플러그인이 활성화되어 있어야 합니다.

이 쿼리의 기능

Calendar (and Event) 플러그인을 사용하여 Discourse 사이트에서 이벤트를 진행하는 경우, 이벤트 전 브리핑 전송, 물류 정보 공유 또는 이벤트 후 후속 조치를 위해 이메일 주소가 포함된 전체 참석자 목록이 필요할 수 있습니다.

이벤트 메뉴에 내장된 “Export event” 기능은 RSVP 목록을 다운로드하지만, 이는 개인 메시지로 압축 파일 형태로 전달됩니다. 이 Data Explorer 쿼리는 각 참석자의 기본 이메일 주소를 포함하며, 결과를 화면에서 빠르게 확인하고 CSV 또는 JSON으로 직접 내보낼 수 있는 대안을 제공합니다.

이 쿼리는 주어진 이벤트에 응답한 모든 사용자를 반환합니다(“Going”, “Interested”, “Not Going” 중 어떤 선택을 했든 관계없이) 사용자를 사용자 이름(alphabetical) 순으로 정렬합니다.

SQL 쿼리

-- [params]
-- integer :event_topic_id = 23338

SELECT 
  u.id AS user_id,
  u.username,
  u.name,
  e.email
FROM users u
JOIN user_emails e ON u.id = e.user_id
JOIN discourse_post_event_invitees invitees ON u.id = invitees.user_id
JOIN posts p ON p.id = invitees.post_id
WHERE e.primary = true
AND p.topic_id = :event_topic_id
ORDER BY u.username

매개변수

매개변수 유형 설명
:event_topic_id Integer 초대 객체를 가져오려는 이벤트의 토픽 ID입니다. 이벤트 토픽의 URL에서 찾을 수 있습니다. 예를 들어, discourse.example.com/t/my-event-topic/23338에서 토픽 ID는 23338입니다.

쿼리 작동 방식

이 쿼리는 네 개의 데이터베이스 테이블에서 데이터를 가져와 결합하여 단일 목록을 생성합니다:

  1. users — 사용자 이름과 표시 이름과 같은 기본 사용자 프로필 정보를 포함합니다.
  2. user_emails — 각 사용자와 관련된 이메일 주소를 저장합니다. 사용자는 여러 이메일 주소를 가질 수 있으므로, 쿼리는 e.primary = true를 사용하여 기본 이메일만 필터링합니다.
  3. discourse_post_event_invitees — 이벤트에 응답한 모든 사용자를 기록합니다(“Going”, “Interested”, “Not Going”을 클릭하여). 각 기록은 사용자를 이벤트가 포함된 게시물과 연결합니다.
  4. posts — 이벤트의 게시물을 상위 토픽과 연결하여, 내부 게시물 ID를 알아야 할 필요 없이 토픽 ID로 초대 객체를 조회할 수 있게 합니다.

JOIN 문은 이 테이블들을 연결하여 지정된 이벤트 토픽의 초대 객체 목록에 나타나는 사용자만 포함되도록 합니다. 결과는 사용자 이름 순으로 정렬됩니다.

결과 예시

user_id username name email
42 alice_m Alice Martinez alice@example.com
87 bob_jones Bob Jones bob@example.com
15 carol_w Carol Wu carol@example.com
63 david_k David Kim david@example.com

RSVP 상태별 필터링

위 쿼리는 RSVP 상태와 관계없이 모든 초대 객체를 반환합니다. “Going”으로 표시한 사용자만 원한다면 WHERE 절에 상태 필터를 추가할 수 있습니다. discourse_post_event_invitees 테이블의 status 열은 다음 값을 사용합니다:

상태 코드 의미
0 Going
1 Interested
2 Not Going

예를 들어, “Going”인 사용자만 반환하려면 WHERE 절에 AND invitees.status = 0을 추가하십시오:

-- [params]
-- integer :event_topic_id = 23338

SELECT 
  u.id AS user_id,
  u.username,
  u.name,
  e.email
FROM users u
JOIN user_emails e ON u.id = e.user_id
JOIN discourse_post_event_invitees invitees ON u.id = invitees.user_id
JOIN posts p ON p.id = invitees.post_id
WHERE e.primary = true
AND p.topic_id = :event_topic_id
AND invitees.status = 0
ORDER BY u.username

CASE 표현식을 추가하여 숫자 대신 읽을 수 있는 라벨로 RSVP 상태를 표시할 수도 있습니다:

CASE 
  WHEN invitees.status = 0 THEN 'Going'
  WHEN invitees.status = 1 THEN 'Interested'
  WHEN invitees.status = 2 THEN 'Not Going'
END AS rsvp_status

쿼리 실행

  1. Admin > Plugins > Data Explorer로 이동합니다(또는 /admin/plugins/discourse-data-explorer로 이동합니다).
  2. + 버튼을 클릭하여 새 쿼리를 생성합니다.
  3. 쿼리에 이름을 부여합니다(예: “이메일이 포함된 이벤트 초대 객체”).
  4. SQL을 쿼리 편집기에 붙여넣습니다.
  5. Run을 클릭한 다음, 프롬프트가 표시되면 이벤트의 토픽 ID를 입력합니다.
  6. 쿼리 실행이 완료된 후 결과를 다운로드하려면 CSV 또는 JSON 버튼을 클릭합니다.

:information_source: 이메일 열에는 민감한 개인 데이터가 포함되어 있습니다. 결과를 내보내거나 공유할 때 주의하시고, 이 데이터의 사용이 커뮤니티의 개인정보 보호 정책 및 관련 데이터 보호 규정과 일치하는지 확인하십시오.

일반적인 문제 및 해결 방법

문제 해결 방법
쿼리가 0개의 결과를 반환합니다 토픽 ID가 정확한지, 사용자가 실제로 이벤트에 RSVP했는지 다시 확인하십시오. 이벤트 토픽을 방문하여 참석자 목록을 확인함으로써 검증할 수 있습니다.
“relation discourse_post_event_invitees does not exist” 오류 Calendar (and Event) 플러그인이 설치되지 않았거나 활성화되지 않았습니다. 이 쿼리는 플러그인이 활성 상태여야 합니다.
결과에 중복 행이 나타납니다 사용자가 기본으로 표시된 여러 이메일 기록을 가지고 있는 경우(흔하지는 않지만 가능) 중복이 발생할 수 있습니다. SELECT 뒤에 DISTINCT를 추가하면 이를 해결할 수 있습니다.
1개의 좋아요