La forma más fácil de exportar una lista de emails de usuarios por ID o username?

Hola,

Mis disculpas si esta información ya está en otro lugar, he buscado pero no he encontrado una respuesta sólida.

Estoy tratando de averiguar la forma más fácil de encontrar el correo electrónico de un usuario utilizando su nombre de usuario o ID de usuario en masa. Soy el administrador de mi sitio, por lo que tengo los permisos, y soy consciente de que puedo encontrar esta información en el perfil de un usuario. Sin embargo, necesito hacer esto para potencialmente miles de usuarios.

La situación es que, desafortunadamente, se crearon miles de cuentas de bots para votar en una encuesta que estábamos realizando, y necesito reducir con precisión los recuentos finales para determinar adecuadamente a los ganadores. He utilizado la consulta Poll results report del Data Explorer para devolver los resultados de la votación de la encuesta, pero eso no devuelve los correos electrónicos de los usuarios. Supongo que sería posible escribir otra consulta para el plugin Data Explorer que pudiera tomar una lista de IDs o nombres de usuario y devolver una lista correspondiente de correos electrónicos. Pero no tengo conocimientos de SQL, así que estoy un poco perdido al respecto.

Si alguien pudiera orientarme, o tuviera una mejor sugerencia sobre cómo obtener esta información, ¡lo agradecería!

Gracias.

Te recomiendo que vayas a https://ask.discourse.com/ y escribas tu consulta, diciéndole que necesitas los correos electrónicos de los usuarios (creo que necesitas unir el user_id que tienes a la tabla UserEmails para obtener las direcciones de correo electrónico).

1 me gusta

Por alguna razón no sabía eso. Resolvió mi problema inmediatamente, ¡muchas gracias!

Por cierto, la consulta que sugirió es

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 (/* lista de IDs de usuario aquí, p. ej. 1,2,3 */)
1 me gusta

Creo que puedes hacer uno más inteligente que rellene la “lista de usuarios” con otra selección.

Dale la consulta de los resultados de la encuesta y pregúntale si puede combinarlas.

1 me gusta

Sí, yo también pensé en eso. La consulta inicial era todo lo que necesitaba para resolver este problema, pero que los correos electrónicos se devuelvan en la consulta de resultados de la encuesta será útil para el futuro.

Procedí y le pedí a la IA que hiciera lo que sugeriste. Con un poco de manipulación (para hacer que la encuesta específica sea seleccionable), obtuve lo siguiente:

-- [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, ¡gracias de nuevo por el consejo!

Que yo te diga qué decirle a la IA que haga es una codificación de vibras de otro nivel. :rofl:

1 me gusta

Creo que esto podría simplificarse a algo como esto (y también apoyarse en parte de la magia del explorador de datos):

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

El tipo de parámetro post_id te permite pegar la URL de la publicación y obtener su post_id de esa manera (por ejemplo, https://meta.discourse.org/t/export-a-list-of-user-emails-by-user-id/373768/5). Y la mayoría de las encuestas únicas en una publicación se llaman simplemente ‘poll’ a menos que se agregue una segunda a la misma publicación (o se agregue manualmente), por lo que tener eso como valor predeterminado para :poll_name parecía útil.

Además, user_id tiene algo de magia, por lo que mostrará un avatar y un nombre de usuario como enlace a la tarjeta de usuario/perfil en lugar de simplemente el user_id en texto plano. Muy útil para ver los resultados ‘en el sitio’, aunque si planeas exportarlos, deberías agregar la tabla users nuevamente para obtener la versión en texto del nombre de usuario.

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