Esta é uma consulta SQL do Data Explorer que recupera uma lista de todos os usuários que confirmaram presença em um evento específico, juntamente com seus endereços de e-mail primários. É útil para coordenadores de eventos que precisam de informações de contato dos participantes para acompanhamentos, lembretes ou comunicações externas.
Nível de usuário necessário: Administrador
Esta consulta requer que o plugin Calendar (and Event) esteja ativado.
O que esta consulta faz
Se você realiza eventos em seu site Discourse usando o plugin Calendar (and Event), talvez precise de uma maneira de obter uma lista completa de participantes com endereços de e-mail — por exemplo, para enviar um resumo pré-evento, compartilhar informações logísticas ou fazer um acompanhamento pós-evento.
O recurso integrado “Exportar evento” no menu do evento baixa uma lista de confirmações de presença (RSVP), mas é entregue como um arquivo compactado via mensagem pessoal. Esta consulta do Data Explorer oferece uma alternativa mais rápida, na tela, que inclui o endereço de e-mail primário de cada participante e permite exportar os resultados diretamente para CSV ou JSON.
A consulta retorna todos os usuários que responderam a um determinado evento (independentemente de terem escolhido “Confirmado”, “Interessado” ou “Não irei”), ordenados alfabeticamente por nome de usuário.
Consulta 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
Parâmetro
| Parâmetro | Tipo | Descrição |
|---|---|---|
:event_topic_id |
Inteiro | O ID do tópico do evento do qual você deseja extrair os convidados. Você pode encontrá-lo na URL do tópico do evento — por exemplo, em discourse.example.com/t/my-event-topic/23338, o ID do tópico é 23338. |
Como a consulta funciona
Esta consulta extrai dados de quatro tabelas de banco de dados e os combina para produzir uma única lista:
users— Contém informações básicas do perfil do usuário, como nome de usuário e nome de exibição.user_emails— Armazena endereços de e-mail associados a cada usuário. Um usuário pode ter vários endereços de e-mail, portanto, a consulta filtra para incluir apenas o e-mail primário usandoe.primary = true.discourse_post_event_invitees— Registra cada usuário que respondeu a um evento (ao clicar em “Confirmado”, “Interessado” ou “Não irei”). Cada registro vincula um usuário à postagem que contém o evento.posts— Conecta a postagem do evento ao seu tópico pai, permitindo que você pesquise convidados pelo ID do tópico em vez de precisar saber o ID interno da postagem.
As instruções JOIN vinculam essas tabelas para que apenas os usuários que aparecem na lista de convidados para o tópico de evento especificado sejam incluídos. Os resultados são ordenados alfabeticamente por nome de usuário.
Resultados de exemplo
| 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 |
Filtragem por status de RSVP
A consulta acima retorna todos os convidados, independentemente do status de confirmação de presença. Se você deseja apenas os usuários que se marcaram como “Confirmado”, pode adicionar um filtro de status à cláusula WHERE. A coluna status na tabela discourse_post_event_invitees usa estes valores:
| Código de Status | Significado |
|---|---|
0 |
Confirmado (Going) |
1 |
Interessado (Interested) |
2 |
Não Irei (Not Going) |
Por exemplo, para retornar apenas os usuários que estão “Confirmados”, adicione AND invitees.status = 0 à cláusula 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
Você também pode exibir o status de RSVP como um rótulo legível em vez de um número adicionando uma expressão CASE:
CASE
WHEN invitees.status = 0 THEN 'Going'
WHEN invitees.status = 1 THEN 'Interested'
WHEN invitees.status = 2 THEN 'Not Going'
END AS rsvp_status
Executando a consulta
- Vá para Admin > Plugins > Data Explorer (ou navegue até
/admin/plugins/discourse-data-explorer). - Clique no botão + para criar uma nova consulta.
- Dê um nome à consulta (por exemplo, “Convidados do evento com e-mails”).
- Cole o SQL no editor de consultas.
- Clique em Run (Executar) e, em seguida, insira o ID do tópico do seu evento quando solicitado.
- Para baixar os resultados, clique no botão CSV ou JSON após a consulta terminar de ser executada.
A coluna de e-mail contém dados pessoais sensíveis. Tenha cuidado ao exportar ou compartilhar os resultados e certifique-se de que seu uso desses dados esteja em conformidade com a política de privacidade de sua comunidade e com quaisquer regulamentos de proteção de dados aplicáveis.
Problemas comuns e soluções
| Problema | Solução |
|---|---|
| A consulta retorna zero resultados | Verifique se o ID do tópico está correto e se os usuários realmente confirmaram presença no evento. Você pode verificar visitando o tópico do evento e olhando a lista de participantes. |
| Erro “relação discourse_post_event_invitees não existe” | O plugin Calendar (and Event) não está instalado ou ativado. Esta consulta requer que o plugin esteja ativo. |
| Linhas duplicadas aparecem nos resultados | Se um usuário tiver vários registros de e-mail marcados como primários (incomum, mas possível), você poderá ver duplicatas. Adicionar DISTINCT após SELECT pode resolver isso. |