Entschuldigen Sie, wenn diese Informationen bereits woanders zu finden sind. Ich habe gesucht, aber keine eindeutige Antwort gefunden.
Ich versuche herauszufinden, wie ich am einfachsten die E-Mail-Adresse eines Benutzers anhand seines Benutzernamens oder seiner Benutzer-ID in großen Mengen finden kann. Ich bin der Administrator meiner Website, daher habe ich die Berechtigungen, und ich bin mir bewusst, dass ich diese Informationen im Profil eines Benutzers finden kann. Ich muss dies jedoch für potenziell Tausende von Benutzern tun.
Die Situation ist, dass leider Tausende von Bot-Konten erstellt wurden, um bei einer von uns durchgeführten Umfrage abzustimmen, und ich muss die Endergebnisse genau filtern, um die Gewinner angemessen zu ermitteln. Ich habe die Data Explorer-Abfrage Umfrageergebnisse verwendet, um die Abstimmungsergebnisse für die Umfrage zurückzugeben, aber diese gibt keine E-Mail-Adressen der Benutzer zurück. Ich gehe davon aus, dass es möglich wäre, eine weitere Abfrage für das Data Explorer-Plugin zu schreiben, die eine Liste von IDs oder Benutzernamen entgegennehmen und eine entsprechende Liste von E-Mail-Adressen zurückgeben könnte. Aber ich bin nicht kenntnisreich in SQL, daher bin ich ein wenig ratlos, wie ich das herausfinden soll.
Wenn mir jemand in die richtige Richtung weisen könnte oder eine bessere Idee hat, wie ich diese Informationen erhalten kann, würde ich mich freuen!
Ich empfehle Ihnen, https://ask.discourse.com/ zu besuchen, Ihre Abfrage einzugeben und anzugeben, dass Sie die Benutzer-E-Mails benötigen (Sie müssen die user_id, die Sie meiner Meinung nach haben, mit der UserEmails-Tabelle verknüpfen, um die E-Mail-Adressen zu erhalten).
Wusste ich irgendwie nicht. Hat mein Problem sofort gelöst, vielen Dank!
Übrigens lautet die vorgeschlagene Abfrage
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 von Benutzer-IDs hier, z.B. 1,2,3 */)
Ja, daran habe ich auch gedacht. Die ursprüngliche Abfrage war alles, was ich brauchte, um dieses Problem zu lösen, aber es wird nützlich sein, E-Mails in der Abfrage der Umfrageergebnisse für die Zukunft zurückzugeben.
Ich habe die KI wie von Ihnen vorgeschlagen machen lassen. Mit ein wenig Bastelei (um die spezifische Umfrage auswählbar zu machen), habe ich Folgendes erhalten:
-- [Parameter]
-- int :topic_id
-- int :post_number
-- text :poll_name
SELECT polls.name AS "Umfragenname",
poll_options.html AS "Antwort",
poll_votes.user_id AS "Benutzer-ID",
users.username AS "Benutzername",
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
Es scheint zu funktionieren, nochmals vielen Dank für den Rat!
Ich denke, das könnte vereinfacht werden zu so etwas (und auch auf einige der Data Explorer-Magie zurückgreifen):\n\n```sql
– [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
Der Parameter-Typ `post_id` erlaubt es Ihnen, die Post-URL einzufügen und auf diese Weise dessen `post_id` zu erhalten (z. B. `https://meta.discourse.org/t/export-a-list-of-user-emails-by-user-id/373768/5`). Und die meisten einzelnen Umfragen in einem Beitrag werden einfach 'poll' genannt, es sei denn, eine zweite wird zum selben Beitrag hinzugefügt (oder manuell hinzugefügt), daher schien es nützlich, dies als Standard für `:poll_name` zu haben.
Außerdem hat `user_id` etwas Magie, sodass ein Avatar und Benutzername als Link zur Benutzerkarte/Profil angezeigt werden, anstatt nur die einfache Benutzer-ID selbst. Sehr nützlich, um Ergebnisse 'onsite' anzuzeigen, obwohl Sie, wenn Sie planen, sie zu exportieren, die `users`-Tabelle wieder hinzufügen müssten, um die Textversion des Benutzernamens zu erhalten.