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.