Einfachste Möglichkeit, eine Liste von Benutzer-E-Mails nach ID oder Benutzername zu exportieren?

Hallo,

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!

Vielen Dank.

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).

1 „Gefällt mir“

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 */)
1 „Gefällt mir“

Ich denke, Sie können eine cleverere Lösung finden, die die „Liste der Benutzer“ mit einer weiteren Auswahl füllt.

Geben Sie ihr die Abfrage aus den Umfrageergebnissen und fragen Sie, ob sie diese kombinieren kann.

1 „Gefällt mir“

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!

Dass ich dir sage, was du der KI sagen sollst, was sie tun soll, ist eine Art von Vibe-Coding der nächsten Stufe! :rofl:

1 „Gefällt mir“

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.

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