Экспорт списка электронных адресов пользователей по ID пользователя

Здравствуйте,

Приношу извинения, если эта информация уже где-то есть; я искал, но не смог найти чёткого ответа.

Я пытаюсь понять, как проще всего найти email пользователя по его имени пользователя или ID массово. Я администратор своего сайта, поэтому у меня есть соответствующие права, и я знаю, что эту информацию можно найти на странице профиля пользователя. Однако мне нужно сделать это для потенциально тысяч пользователей.

Ситуация следующая: к сожалению, были созданы тысячи бот-аккаунтов для голосования в нашем опросе, и мне нужно точно скорректировать итоговые подсчёты, чтобы правильно определить победителей. Я использовал запрос в Data Explorer «Отчёт о результатах опроса» для получения результатов голосования, но он не возвращает email-адреса пользователей. Я предполагаю, что можно написать другой запрос для плагина Data Explorer, который будет принимать список ID или имён пользователей и возвращать соответствующий список email-адресов. Но я не разбираюсь в SQL, поэтому немного растерян в этом вопросе.

Если кто-то сможет подсказать правильное направление или предложить лучший способ получения этой информации, буду очень признателен!

Спасибо.

Я рекомендую вам перейти на https://ask.discourse.com/, ввести свой запрос и указать, что вам нужны адреса электронной почты пользователей (вам нужно соединить user_id, который, как я полагаю, у вас есть, с таблицей UserEmails, чтобы получить адреса электронной почты).

Как-то не знал об этом. Сразу решил мою проблему, большое спасибо!

Кстати, рабочий запрос:

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 */)

Я думаю, можно сделать более хитрый вариант, который заполнит «список пользователей» с помощью другого селекта.

Дай ему запрос из результатов опроса и спроси, сможет ли он их объединить.

Да, я тоже так подумал. Исходного запроса было достаточно, чтобы решить эту проблему, но наличие адресов электронной почты в результатах опроса будет полезно в будущем.

Я последовал твоему совету и попросил ИИ выполнить это. После небольшой доработки (чтобы можно было выбрать конкретный опрос) у меня получилось следующее:

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

Я думаю, это можно упростить до чего-то вроде этого (а также задействовать некоторые возможности «магии» проводника данных):

-- [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 позволяет вставить URL поста и автоматически получить его идентификатор (например, https://meta.discourse.org/t/export-a-list-of-user-emails-by-user-id/373768/5). Кроме того, большинство одиночных опросов в посте по умолчанию называются «poll», если только к тому же посту не добавлен второй опрос (или он не добавлен вручную), поэтому использование этого значения по умолчанию для :poll_name кажется удобным.

Также параметр user_id обладает некоторыми «магическими» свойствами: он отображает аватар и имя пользователя в виде ссылки на карточку профиля пользователя, а не просто обычный идентификатор. Это очень удобно для просмотра результатов «на сайте», хотя если вы планируете их экспортировать, вам нужно будет добавить таблицу users обратно, чтобы получить текстовую версию имени пользователя.