Il modo più semplice per esportare una lista di User Emails tramite ID o Username?

Ciao,

Mi scuso se queste informazioni sono già disponibili altrove, ho cercato ma non sono riuscito a trovare una risposta definitiva.

Sto cercando di capire il modo più semplice per trovare l’email di un utente utilizzando il suo nome utente o ID utente in massa. Sono l’amministratore del mio sito, quindi ho i permessi e sono consapevole di poter trovare queste informazioni nel profilo di un utente. Tuttavia, ho bisogno di farlo per potenzialmente migliaia di utenti.

La situazione è che, sfortunatamente, sono stati creati migliaia di account bot per votare in un sondaggio che stavamo gestendo, e ho bisogno di ridurre accuratamente i conteggi finali per determinare in modo appropriato i vincitori. Ho utilizzato la query Poll results report di Data Explorer per restituire i risultati del voto per il sondaggio, ma questo non restituisce le email degli utenti. Presumo che sarebbe possibile scrivere un’altra query per il plugin Data Explorer che potrebbe prendere un elenco di ID o nomi utente e restituire un elenco corrispondente di email. Ma non sono esperto di SQL, quindi sono un po’ perso nel capirlo.

Se qualcuno potesse indicarmi la giusta direzione, o avesse un suggerimento migliore su come ottenere queste informazioni, lo apprezzerei!

Grazie.

Ti consiglio di andare su https://ask.discourse.com/ e inserire la query che hai, dicendogli che hai bisogno delle email degli utenti (devi unire lo user_id che penso tu abbia alla tabella UserEmails per ottenere gli indirizzi email)

1 Mi Piace

Non ne ero a conoscenza. Ha risolto immediatamente il mio problema, grazie mille!
A proposito, la query che ha suggerito è

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 (/* elenco degli ID utente qui, ad es. 1,2,3 */)
1 Mi Piace

Penso che tu possa crearne uno più intelligente che riempia la “lista di utenti” con un altro select.

Dai la query dei risultati del sondaggio e chiedi se può combinarli.

1 Mi Piace

Sì, ci ho pensato anch’io. La query iniziale era tutto ciò di cui avevo bisogno per risolvere questo problema, ma avere le email restituite nella query dei risultati del sondaggio sarà utile per il futuro.

Sono andato avanti e ho fatto fare all’IA come hai suggerito. Con un po’ di aggiustamenti (per rendere selezionabile il sondaggio specifico), ho ottenuto quanto segue:

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

SELECT polls.name AS "Nome Sondaggio",
       poll_options.html AS "Risposta",
       poll_votes.user_id AS "ID Utente",
       users.username AS "Nome Utente",
       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

Sembra che funzioni, grazie ancora per il consiglio!

Il fatto che io ti dica cosa dire all’IA su cosa fare è una sorta di “vibe coding” di altissimo livello! :rofl:

1 Mi Piace

Penso che questo possa essere semplificato in qualcosa di simile (e fare anche leva su un po’ della magia del data explorer):

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

Il tipo di parametro post_id ti permette di incollare l’URL del post e ottenere il suo post_id in quel modo (es. https://meta.discourse.org/t/export-a-list-of-user-emails-by-user-id/373768/5). E la maggior parte dei sondaggi singoli in un post sono semplicemente chiamati ‘poll’ a meno che non se ne aggiunga un secondo allo stesso post (o se ne aggiunga uno manualmente), quindi averlo come predefinito per :poll_name è sembrato utile.

Inoltre, user_id ha una certa magia, quindi mostrerà un avatar e un nome utente come link alla scheda utente/profilo anziché semplicemente l’ID utente semplice stesso. Molto utile per visualizzare i risultati ‘sul sito’, anche se se hai intenzione di esportarli allora dovresti aggiungere nuovamente la tabella users per ottenere la versione testuale del nome utente.

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