按ID或用户名导出用户电子邮件列表的最简单方法?

你好,

如果此信息已在别处提供,请原谅,我已查找但找不到确切答案。

我正在尝试找出最简单的方法,通过用户名或用户 ID 批量查找用户的电子邮件。我是我网站的管理员,所以我拥有权限,并且我知道可以在用户个人资料中找到此信息。但是,我需要为可能数千名用户执行此操作。

情况是这样的,不幸的是,创建了数千个机器人帐户来投票我们正在进行的民意调查,我需要准确地精简最终计数以恰当地确定获胜者。我使用了民意调查结果报告数据探索器查询来返回民意调查的投票结果,但这不返回用户电子邮件。我假设可以为数据探索器插件编写另一个查询,该查询可以接受 ID 或用户名的列表并返回相应的电子邮件列表。但我对 SQL 不太了解,所以在弄清楚这一点上有点迷茫。

如果有人能给我指明正确的方向,或者对如何获取此信息有更好的建议,我将不胜感激!

谢谢。

我建议您前往 https://ask.discourse.com/,输入您的查询,并告知您需要用户电子邮件(您需要将 user_id 加入到 UserEmails 表中以获取电子邮件地址)。

1 个赞

居然不知道这个。问题马上就解决了,非常感谢!

顺便说一下它建议的查询是

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 (/* 此处填写用户ID列表,例如 1,2,3 */)
1 个赞

我认为你可以做一个更巧妙的,用另一个选择器来填充“用户列表”。将投票结果的查询提供给它,并询问它是否可以合并这些结果。

1 个赞

是的,我也这么想过。最初的查询是我解决此问题所需的一切,但能在投票结果查询中返回电子邮件将在未来很有用。

我继续让 AI 按照您的建议进行操作。经过一些调整(以使特定投票可被选中),我得到了以下结果:

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

SELECT polls.name AS "Poll Name",
       poll_options.html AS "Answer",
       poll_votes.user_id AS "User ID",
       users.username AS "Username",
       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

看起来它正在工作,再次感谢您的建议!

我告诉你该怎么指示人工智能,这简直是最高境界的氛围编程!:rofl:

1 个赞

我认为可以将其简化为如下(同时也可以利用数据浏览器的某些魔力):

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

post_id 参数类型允许您粘贴帖子网址并以此方式获取其 post_id(例如 https://meta.discourse.org/t/export-a-list-of-user-emails-by-user-id/373768/5)。帖子中的大多数单个投票都简单地称为“poll”,除非在同一帖子中添加了第二个投票(或手动添加),因此将其作为 :poll_name 的默认值似乎很有用。

此外,user_id 具有一些魔力,它将显示头像和用户名,链接到用户卡/个人资料,而不是仅仅显示纯用户 ID 本身。在“站内”查看结果非常有用,但如果您计划导出它们,则需要重新添加 users 表以获取用户名的文本版本。

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