Ceci est une requête SQL Data Explorer qui récupère une liste de tous les utilisateurs qui ont répondu à un événement spécifique, ainsi que leurs adresses e-mail principales. Elle est utile pour les coordinateurs d’événements qui ont besoin des coordonnées des participants pour les suivis, les rappels ou les communications externes.
Niveau d’utilisateur requis : Administrateur
Cette requête nécessite que le plugin Calendar (and Event) soit activé.
Ce que fait cette requête
Si vous organisez des événements sur votre site Discourse en utilisant le plugin Calendar (and Event), vous pourriez avoir besoin d’un moyen d’obtenir une liste complète des participants avec leurs adresses e-mail — par exemple, pour envoyer un briefing avant l’événement, partager des informations logistiques ou faire un suivi après l’événement.
La fonctionnalité intégrée « Exporter l’événement » dans le menu de l’événement télécharge une liste des RSVP, mais elle est fournie sous forme de fichier zippé via un message personnel. Cette requête Data Explorer vous offre une alternative sur écran plus rapide qui inclut l’adresse e-mail principale de chaque participant, et vous permet d’exporter les résultats directement au format CSV ou JSON.
La requête renvoie tous les utilisateurs qui ont répondu à un événement donné (indépendamment du fait qu’ils aient choisi « J’y vais », « Intéressé » ou « N’y vais pas »), triés par ordre alphabétique de nom d’utilisateur.
Requête 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
Paramètre
| Paramètre | Type | Description |
|---|---|---|
:event_topic_id |
Integer | L’ID du sujet de l’événement à partir duquel vous souhaitez extraire les invités. Vous pouvez le trouver dans l’URL du sujet de l’événement — par exemple, dans discourse.example.com/t/mon-sujet-evenement/23338, l’ID du sujet est 23338. |
Comment fonctionne la requête
Cette requête extrait des données de quatre tables de base de données et les combine pour produire une liste unique :
users— Contient les informations de profil utilisateur de base telles que le nom d’utilisateur et le nom d’affichage.user_emails— Stocke les adresses e-mail associées à chaque utilisateur. Un utilisateur peut avoir plusieurs adresses e-mail, la requête filtre donc pour n’inclure que l’e-mail principal en utilisante.primary = true.discourse_post_event_invitees— Enregistre chaque utilisateur qui a répondu à un événement (en cliquant sur « J’y vais », « Intéressé » ou « N’y vais pas »). Chaque enregistrement lie un utilisateur au message contenant l’événement.posts— Relie le message de l’événement à son sujet parent, vous permettant de rechercher les invités par ID de sujet au lieu d’avoir besoin de connaître l’ID de message interne.
Les instructions JOIN lient ces tables afin que seuls les utilisateurs qui apparaissent dans la liste des invités pour le sujet d’événement spécifié soient inclus. Les résultats sont triés par ordre alphabétique de nom d’utilisateur.
Résultats de l’exemple
| 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 |
Filtrage par statut RSVP
La requête ci-dessus renvoie tous les invités quel que soit leur statut RSVP. Si vous ne souhaitez que les utilisateurs qui se sont marqués comme « J’y vais », vous pouvez ajouter un filtre de statut à la clause WHERE. La colonne status dans la table discourse_post_event_invitees utilise les valeurs suivantes :
| Code de statut | Signification |
|---|---|
0 |
J’y vais (Going) |
1 |
Intéressé (Interested) |
2 |
N’y vais pas (Not Going) |
Par exemple, pour ne retourner que les utilisateurs qui « J’y vont », ajoutez AND invitees.status = 0 à la clause 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
Vous pouvez également afficher le statut RSVP sous forme d’étiquette lisible au lieu d’un nombre en ajoutant une expression CASE :
CASE
WHEN invitees.status = 0 THEN 'J\'y vais'
WHEN invitees.status = 1 THEN 'Intéressé'
WHEN invitees.status = 2 THEN 'N\'y vais pas'
END AS rsvp_status
Exécution de la requête
- Allez à Admin > Plugins > Data Explorer (ou naviguez vers
/admin/plugins/discourse-data-explorer). - Cliquez sur le bouton + pour créer une nouvelle requête.
- Donnez un nom à la requête (par exemple, « Invités d’événement avec e-mails »).
- Collez le SQL dans l’éditeur de requête.
- Cliquez sur Exécuter, puis entrez l’ID du sujet de votre événement lorsqu’il vous est demandé.
- Pour télécharger les résultats, cliquez sur le bouton CSV ou JSON une fois l’exécution de la requête terminée.
La colonne e-mail contient des données personnelles sensibles. Soyez prudent lorsque vous exportez ou partagez les résultats, et assurez-vous que votre utilisation de ces données est conforme à la politique de confidentialité de votre communauté et à toutes les réglementations applicables en matière de protection des données.
Problèmes courants et solutions
| Problème | Solution |
|---|---|
| La requête renvoie zéro résultat | Vérifiez que l’ID du sujet est correct et que des utilisateurs ont effectivement répondu à l’événement. Vous pouvez le vérifier en visitant le sujet de l’événement et en consultant la liste des participants. |
| Erreur « relation discourse_post_event_invitees does not exist » | Le plugin Calendar (and Event) n’est pas installé ou n’est pas activé. Cette requête nécessite que le plugin soit actif. |
| Des lignes en double apparaissent dans les résultats | Si un utilisateur possède plusieurs enregistrements d’e-mail marqués comme principaux (peu courant, mais possible), vous pourriez voir des doublons. L’ajout de DISTINCT après SELECT peut résoudre ce problème. |