Moyen le plus simple d'exporter une liste d'e-mails d'utilisateurs par ID ou nom d'utilisateur ?

Bonjour,

Mes excuses si cette information se trouve déjà ailleurs, j’ai cherché mais je n’ai pas trouvé de réponse claire.

J’essaie de trouver le moyen le plus simple de trouver l’adresse e-mail d’un utilisateur en utilisant son nom d’utilisateur ou son identifiant en masse. Je suis l’administrateur de mon site, j’ai donc les autorisations, et je suis conscient que je peux trouver cette information sur le profil d’un utilisateur. Cependant, j’ai besoin de le faire pour potentiellement des milliers d’utilisateurs.

La situation est que, malheureusement, des milliers de comptes de bots ont été créés pour voter dans un sondage que nous organisions, et je dois réduire avec précision les décomptes finaux pour déterminer correctement les gagnants. J’ai utilisé la requête Poll results report de Data Explorer pour retourner les résultats du vote pour le sondage, mais cela ne retourne pas les adresses e-mail des utilisateurs. Je suppose qu’il serait possible d’écrire une autre requête pour le plugin Data Explorer qui pourrait prendre une liste d’identifiants ou de noms d’utilisateur et retourner une liste correspondante d’adresses e-mail. Mais je ne connais pas bien le SQL, donc je suis un peu perdu pour le découvrir.

Si quelqu’un pouvait m’orienter, ou avait une meilleure suggestion pour obtenir cette information, je l’apprécierais !

Merci.

Je vous recommande d’aller sur https://ask.discourse.com/ et d’entrer votre requête, puis de lui dire que vous avez besoin des e-mails des utilisateurs (vous devrez joindre l’user_id que je pense que vous avez à la table UserEmails pour obtenir les adresses e-mail).

1 « J'aime »

Je ne le savais pas. Cela a immédiatement résolu mon problème, merci beaucoup !

Au fait, la requête qu’il a suggérée est

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 (/* liste d'identifiants d'utilisateur ici, par exemple 1,2,3 */)
1 « J'aime »

Je pense que vous pouvez en faire une plus intelligente qui remplira la « liste d’utilisateurs » avec une autre sélection.

Donnez-lui la requête des résultats du sondage et demandez si elle peut les combiner.

1 « J'aime »

Oui, j’y ai pensé aussi. La requête initiale était tout ce dont j’avais besoin pour résoudre ce problème, mais avoir les e-mails retournés dans la requête des résultats du sondage sera utile pour l’avenir.

J’ai continué et j’ai laissé l’IA faire ce que vous avez suggéré. Avec un peu de bricolage (pour rendre le sondage spécifique sélectionnable), j’ai obtenu ceci :

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

SELECT polls.name AS "Nom du sondage",
       poll_options.html AS "Réponse",
       poll_votes.user_id AS "ID utilisateur",
       users.username AS "Nom d'utilisateur",
       user_emails.email AS "E-mail"
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

Il semble que cela fonctionne, merci encore pour vos conseils !

Moi te dire quoi dire à l’IA quoi faire, c’est du codage d’ambiance de haut niveau ! :rofl:

1 « J'aime »

Je pense que cela pourrait être simplifié comme ceci (et s’appuyer également sur la magie de l’explorateur de données) :

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

Le type de paramètre post_id vous permet de coller l’URL du message et d’obtenir son post_id de cette façon (par exemple, https://meta.discourse.org/t/export-a-list-of-user-emails-by-user-id/373768/5). Et la plupart des sondages uniques dans un message sont simplement appelés « poll » à moins qu’un second ne soit ajouté au même message (ou ajouté manuellement), donc avoir cela comme valeur par défaut pour :poll_name semblait utile.

De plus, user_id a une certaine magie qui permet d’afficher un avatar et un nom d’utilisateur sous forme de lien vers la carte utilisateur/profil plutôt que simplement l’identifiant utilisateur brut. Très utile pour visualiser les résultats « sur site », bien que si vous prévoyez de les exporter, vous devrez réintégrer la table users pour obtenir la version texte du nom d’utilisateur.

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