Einladungsempfänger mit E-Mail-Adressen auflisten

:bookmark: Dies ist eine Data Explorer-SQL-Abfrage, die eine Liste aller Benutzer abruft, die für ein bestimmtes Event zugesagt haben, zusammen mit ihren primären E-Mail-Adressen. Sie ist nützlich für Event-Koordinatoren, die Kontaktinformationen der Teilnehmer für Nachfassaktionen, Erinnerungen oder externe Kommunikation benötigen.

:person_raising_hand: Erforderliches Benutzerlevel: Administrator

:discourse2: Diese Abfrage erfordert, dass das Calendar (and Event) Plugin aktiviert ist.

Was diese Abfrage tut

Wenn Sie auf Ihrer Discourse-Seite mithilfe des Calendar (and Event) Plugins Events veranstalten, benötigen Sie möglicherweise eine Möglichkeit, eine vollständige Teilnehmerliste mit E-Mail-Adressen zu erhalten – zum Beispiel, um ein Briefing vor der Veranstaltung zu versenden, Logistikinformationen weiterzugeben oder nach der Veranstaltung nachzufassen.

Die integrierte Funktion „Event exportieren“ im Event-Menü lädt eine Liste der RSVPs herunter, wird jedoch als gezippte Datei per privater Nachricht zugestellt. Diese Data Explorer-Abfrage bietet Ihnen eine schnellere, bildschirmbasierte Alternative, die die primäre E-Mail-Adresse jedes Teilnehmers enthält und es Ihnen ermöglicht, die Ergebnisse direkt in CSV oder JSON zu exportieren.

Die Abfrage gibt alle Benutzer zurück, die auf ein bestimmtes Event geantwortet haben (unabhängig davon, ob sie „Zusage“, „Interessiert“ oder „Nicht dabei“ gewählt haben), alphabetisch sortiert nach Benutzername.

SQL-Abfrage

-- [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

Parameter

Parameter Typ Beschreibung
:event_topic_id Integer Die Topic-ID des Events, aus dem Sie die Eingeladenen abrufen möchten. Sie finden diese in der URL des Event-Topics – zum Beispiel in discourse.example.com/t/my-event-topic/23338 ist die Topic-ID 23338.

Funktionsweise der Abfrage

Diese Abfrage zieht Daten aus vier Datenbanktabellen und kombiniert sie, um eine einzige Liste zu erstellen:

  1. users — Enthält grundlegende Benutzerprofilinformationen wie Benutzername und Anzeigenamen.
  2. user_emails — Speichert E-Mail-Adressen, die mit jedem Benutzer verknüpft sind. Ein Benutzer kann mehrere E-Mail-Adressen haben, daher filtert die Abfrage nur nach der primären E-Mail-Adresse mithilfe von e.primary = true.
  3. discourse_post_event_invitees — Erfasst jeden Benutzer, der auf ein Event geantwortet hat (durch Klicken auf „Zusage“, „Interessiert“ oder „Nicht dabei“). Jeder Eintrag verknüpft einen Benutzer mit dem Beitrag, der das Event enthält.
  4. posts — Verknüpft den Beitrag des Events mit seinem übergeordneten Topic, sodass Sie Eingeladene anhand der Topic-ID nachschlagen können, anstatt die interne Beitrags-ID kennen zu müssen.

Die JOIN-Anweisungen verknüpfen diese Tabellen miteinander, sodass nur Benutzer einbezogen werden, die in der Liste der Eingeladenen für das angegebene Event-Topic erscheinen. Die Ergebnisse werden alphabetisch nach Benutzername sortiert.

Beispielergebnisse

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

Filtern nach RSVP-Status

Die obige Abfrage gibt alle Eingeladenen zurück, unabhängig von ihrem RSVP-Status. Wenn Sie nur Benutzer sehen möchten, die sich als „Zusage“ markiert haben, können Sie der WHERE-Klausel einen Statusfilter hinzufügen. Die Spalte status in der Tabelle discourse_post_event_invitees verwendet diese Werte:

Statuscode Bedeutung
0 Zusage (Going)
1 Interessiert (Interested)
2 Nicht dabei (Not Going)

Um beispielsweise nur Benutzer zurückzugeben, die „Zusage“ sind, fügen Sie AND invitees.status = 0 zur WHERE-Klausel hinzu:

-- [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

Sie können den RSVP-Status auch als lesbare Bezeichnung anstelle einer Zahl anzeigen, indem Sie einen CASE-Ausdruck hinzufügen:

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

Ausführen der Abfrage

  1. Gehen Sie zu Admin > Plugins > Data Explorer (oder navigieren Sie zu /admin/plugins/discourse-data-explorer).
  2. Klicken Sie auf die +-Schaltfläche, um eine neue Abfrage zu erstellen.
  3. Geben Sie der Abfrage einen Namen (z. B. „Event-Eingeladene mit E-Mails“).
  4. Fügen Sie die SQL in den Abfrage-Editor ein.
  5. Klicken Sie auf Ausführen und geben Sie dann die Topic-ID Ihres Events ein, wenn Sie dazu aufgefordert werden.
  6. Um die Ergebnisse herunterzuladen, klicken Sie nach Abschluss der Abfrage auf die Schaltfläche CSV oder JSON.

:information_source: Die E-Mail-Spalte enthält sensible personenbezogene Daten. Gehen Sie vorsichtig mit dem Exportieren oder Teilen der Ergebnisse um und stellen Sie sicher, dass Ihre Verwendung dieser Daten mit der Datenschutzrichtlinie Ihrer Community und allen geltenden Datenschutzbestimmungen übereinstimmt.

Häufige Probleme und Lösungen

Problem Lösung
Die Abfrage liefert null Ergebnisse Überprüfen Sie doppelt, ob die Topic-ID korrekt ist und ob Benutzer tatsächlich für das Event zugesagt haben. Sie können dies überprüfen, indem Sie das Event-Topic besuchen und die Teilnehmerliste einsehen.
Fehler „relation discourse_post_event_invitees does not exist“ Das Calendar (and Event) Plugin ist nicht installiert oder nicht aktiviert. Diese Abfrage erfordert, dass das Plugin aktiv ist.
Doppelte Zeilen erscheinen in den Ergebnissen Wenn ein Benutzer mehrere E-Mail-Einträge hat, die als primär gekennzeichnet sind (ungewöhnlich, aber möglich), werden möglicherweise Duplikate angezeigt. Das Hinzufügen von DISTINCT nach SELECT kann dies beheben.