Jeito mais fácil de exportar uma lista de e-mails de usuários por ID ou nome de usuário?

Olá,

Peço desculpas se esta informação já está em outro lugar, procurei mas não consegui encontrar uma resposta sólida.

Estou tentando descobrir a maneira mais fácil de encontrar o e-mail de um usuário usando o nome de usuário ou ID do usuário em massa. Eu sou o administrador do meu site, então tenho as permissões, e estou ciente de que posso encontrar essa informação no perfil de um usuário. No entanto, preciso fazer isso para potencialmente milhares de usuários.

A situação é que, infelizmente, milhares de contas de bots foram criadas para votar em uma enquete que estávamos realizando, e preciso reduzir com precisão as contagens finais para determinar adequadamente os vencedores. Usei a consulta do Explorador de Dados Relatório de resultados da enquete para retornar os resultados da votação da enquete, mas isso não retorna os e-mails dos usuários. Presumo que seria possível escrever outra consulta para o plugin do explorador de dados que pudesse pegar uma lista de IDs ou Nomes de Usuário e retornar uma lista correspondente de e-mails. Mas não tenho conhecimento em SQL, então estou um pouco perdido para descobrir isso.

Se alguém pudesse me indicar a direção certa, ou tiver uma sugestão melhor de como obter essa informação, eu agradeceria!

Obrigado.

Recomendo que você acesse https://ask.discourse.com/ e insira a consulta que você tem e diga que precisa dos e-mails dos usuários (você precisa juntar o user_id que eu acho que você tem à tabela UserEmails para obter os endereços de e-mail)

1 curtida

Nem sabia disso. Resolveu meu problema imediatamente, muito obrigado!

A propósito, a consulta que sugeriu é

SELECT users.id AS user_id, user_emails.email
FROM users
LEFT JOIN user_emails ON users.id = user_emails.user_id AND user_emails.primary
WHERE users.id IN (/* list of user IDs here, e.g. 1,2,3 */)
1 curtida

Eu acho que você pode fazer um mais inteligente que preencherá a “lista de usuários” com outro select.

Forneça a ele a consulta dos resultados da enquete e pergunte se ele consegue combiná-los.

1 curtida

Sim, eu também pensei nisso. A consulta inicial foi tudo o que eu precisava para resolver este problema, mas ter os e-mails retornados na consulta de resultados da enquete será útil para o futuro.

Eu fui em frente e fiz a IA fazer o que você sugeriu. Com um pouco de ajuste (para tornar a enquete específica selecionável), obtive o seguinte:

-- [params]
-- int :topic_id
-- int :post_number
-- text :poll_name

SELECT polls.name AS "Poll Name",
       poll_options.html AS "Answer",
       poll_votes.user_id AS "User ID",
       users.username AS "Username",
       user_emails.email AS "Email"
FROM poll_options
INNER JOIN poll_votes ON poll_options.id = poll_votes.poll_option_id
INNER JOIN polls ON polls.id = poll_votes.poll_id
INNER JOIN users ON users.id = poll_votes.user_id
LEFT JOIN user_emails ON users.id = user_emails.user_id AND user_emails.primary
WHERE poll_options.poll_id IN (
    SELECT polls.id FROM polls
    WHERE polls.post_id = (
      SELECT posts.id FROM posts WHERE topic_id = :topic_id AND post_number = :post_number
    ) AND polls.name = :poll_name
)
ORDER BY polls.name, poll_options.html

Parece que está funcionando, obrigado novamente pelo conselho!

Eu te dizendo o que dizer à IA para fazer é uma codificação de vibe de nível superior! :rofl:

1 curtida

Acho que isso poderia ser simplificado para algo assim (e também aproveitar um pouco da mágica do explorador de dados):

-- [params]
-- post_id :post_url
-- text :poll_name = poll

SELECT 
    pv.user_id,
    po.html AS answer,
    ue.email
FROM poll_options po
  JOIN poll_votes pv ON po.id = pv.poll_option_id
  JOIN polls p ON p.id = pv.poll_id
  JOIN user_emails ue ON pv.user_id = ue.user_id AND ue.primary
WHERE p.post_id = :post_url
  AND p.name = :poll_name
ORDER BY po.html

O tipo de parâmetro post_id permite que você cole a URL da postagem e obtenha seu post_id dessa forma (por exemplo, https://meta.discourse.org/t/export-a-list-of-user-emails-by-user-id/373768/5). E a maioria das enquetes únicas em uma postagem é simplesmente chamada de ‘poll’, a menos que uma segunda seja adicionada à mesma postagem (ou adicionada manualmente), então ter isso como padrão para :poll_name pareceu útil.

Além disso, user_id tem alguma mágica, então ele mostrará um avatar e nome de usuário como um link para o cartão/perfil do usuário em vez de simplesmente o user_id em texto simples. Muito útil para visualizar resultados ‘no local’, embora se você planeja exportá-los, precisará adicionar a tabela users de volta para obter a versão em texto do nome de usuário.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.