Elenco degli invitati all'evento con indirizzi email

:bookmark: Questa è una query SQL di Data Explorer che recupera un elenco di tutti gli utenti che hanno dato conferma di partecipazione (RSVP) a un evento specifico, insieme ai loro indirizzi email primari. È utile per gli organizzatori di eventi che necessitano delle informazioni di contatto dei partecipanti per follow-up, promemoria o comunicazioni esterne.

:person_raising_hand: Livello utente richiesto: Amministratore

:discourse2: Questa query richiede che il plugin Calendar (and Event) sia abilitato.

Cosa fa questa query

Se gestisci eventi sul tuo sito Discourse utilizzando il plugin Calendar (and Event), potresti aver bisogno di un modo per ottenere un elenco completo dei partecipanti con indirizzi email — ad esempio, per inviare un briefing pre-evento, condividere la logistica o effettuare un follow-up dopo l’evento.

La funzione integrata “Esporta evento” nel menu dell’evento scarica un elenco di RSVP, ma viene fornita come file compresso tramite messaggio personale. Questa query di Data Explorer ti offre un’alternativa più veloce, visualizzata sullo schermo, che include l’indirizzo email primario di ciascun partecipante e ti consente di esportare i risultati direttamente in CSV o JSON.

La query restituisce tutti gli utenti che hanno risposto a un dato evento (indipendentemente dal fatto che abbiano scelto “Parteciperò”, “Interessato” o “Non parteciperò”), ordinati alfabeticamente per nome utente.

Query 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

Parametro

Parametro Tipo Descrizione
:event_topic_id Intero L’ID del topic dell’evento da cui vuoi estrarre i partecipanti. Puoi trovarlo nell’URL del topic dell’evento — ad esempio, in discourse.example.com/t/my-event-topic/23338, l’ID del topic è 23338.

Come funziona la query

Questa query estrae dati da quattro tabelle del database e li combina per produrre un unico elenco:

  1. users — Contiene informazioni di base del profilo utente come nome utente e nome visualizzato.
  2. user_emails — Memorizza gli indirizzi email associati a ciascun utente. Un utente può avere più indirizzi email, quindi la query filtra solo per l’email primaria usando e.primary = true.
  3. discourse_post_event_invitees — Registra ogni utente che ha risposto a un evento (cliccando su “Parteciperò”, “Interessato” o “Non parteciperò”). Ogni record collega un utente al post che contiene l’evento.
  4. posts — Collega il post dell’evento al suo topic padre, consentendo di cercare i partecipanti in base all’ID del topic anziché dover conoscere l’ID interno del post.

Le istruzioni JOIN collegano queste tabelle in modo che vengano inclusi solo gli utenti che appaiono nell’elenco dei partecipanti per il topic dell’evento specificato. I risultati sono ordinati alfabeticamente per nome utente.

Risultati di esempio

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

Filtro per stato RSVP

La query sopra restituisce tutti i partecipanti indipendentemente dal loro stato RSVP. Se desideri solo gli utenti che si sono contrassegnati come “Parteciperò”, puoi aggiungere un filtro di stato alla clausola WHERE. La colonna status nella tabella discourse_post_event_invitees utilizza i seguenti valori:

Codice di stato Significato
0 Parteciperò
1 Interessato
2 Non parteciperò

Ad esempio, per restituire solo gli utenti che “Parteciperanno”, aggiungi AND invitees.status = 0 alla clausola WHERE:

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

Puoi anche visualizzare lo stato RSVP come etichetta leggibile anziché come numero aggiungendo un’espressione CASE:

CASE 
  WHEN invitees.status = 0 THEN 'Parteciperò'
  WHEN invitees.status = 1 THEN 'Interessato'
  WHEN invitees.status = 2 THEN 'Non parteciperò'
END AS rsvp_status

Esecuzione della query

  1. Vai su Admin > Plugin > Data Explorer (o naviga su /admin/plugins/discourse-data-explorer).
  2. Fai clic sul pulsante + per creare una nuova query.
  3. Assegna un nome alla query (es. “Partecipanti all’evento con email”).
  4. Incolla la query SQL nell’editor della query.
  5. Fai clic su Esegui, quindi inserisci l’ID del topic del tuo evento quando richiesto.
  6. Per scaricare i risultati, fai clic sul pulsante CSV o JSON dopo che la query ha finito di essere eseguita.

:information_source: La colonna email contiene dati personali sensibili. Fai attenzione quando esporti o condividi i risultati e assicurati che il tuo utilizzo di questi dati sia conforme alla politica sulla privacy della tua community e a qualsiasi regolamento applicabile sulla protezione dei dati.

Problemi comuni e soluzioni

Problema Soluzione
La query restituisce zero risultati Verifica che l’ID del topic sia corretto e che gli utenti abbiano effettivamente dato conferma di partecipazione all’evento. Puoi verificarlo visitando il topic dell’evento e controllando l’elenco dei partecipanti.
Errore “relation discourse_post_event_invitees does not exist” Il plugin Calendar (and Event) non è installato o non è abilitato. Questa query richiede che il plugin sia attivo.
Appaiono righe duplicate nei risultati Se un utente ha più record email contrassegnati come primari (insolito, ma possibile), potresti vedere duplicati. Aggiungere DISTINCT dopo SELECT può risolvere questo problema.