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.
Livello utente richiesto: Amministratore
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:
users— Contiene informazioni di base del profilo utente come nome utente e nome visualizzato.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 usandoe.primary = true.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.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 | |
|---|---|---|---|
| 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
- Vai su Admin > Plugin > Data Explorer (o naviga su
/admin/plugins/discourse-data-explorer). - Fai clic sul pulsante + per creare una nuova query.
- Assegna un nome alla query (es. “Partecipanti all’evento con email”).
- Incolla la query SQL nell’editor della query.
- Fai clic su Esegui, quindi inserisci l’ID del topic del tuo evento quando richiesto.
- Per scaricare i risultati, fai clic sul pulsante CSV o JSON dopo che la query ha finito di essere eseguita.
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. |