이 정보가 이미 다른 곳에 있다면 죄송합니다. 찾아보았지만 확실한 답변을 찾지 못했습니다.
사용자 이름 또는 사용자 ID를 사용하여 사용자의 이메일 주소를 대량으로 찾는 가장 쉬운 방법을 알아보고 있습니다. 저는 사이트 관리자로서 필요한 권한을 보유하고 있으며, 사용자 프로필에서 이 정보를 찾을 수 있다는 것도 알고 있습니다. 하지만 잠재적으로 수천 명의 사용자에게 이 작업을 수행해야 합니다.
문제는 불행히도 우리가 진행하던 투표에 참여하기 위해 수천 개의 봇 계정이 생성되었고, 최종 집계 결과를 정확히 정리하여 수상자를 적절히 결정해야 한다는 점입니다. Poll results reportData Explorer 쿼리를 사용하여 투표 결과를 가져왔지만, 이 쿼리는 사용자 이메일을 반환하지 않습니다. Data Explorer 플러그인을 위한 다른 쿼리를 작성하면 ID나 사용자 이름 목록을 받아서 해당하는 이메일 목록을 반환할 수 있을 것이라 추측합니다. 하지만 저는 SQL에 익숙하지 않아서 어떻게 해야 할지 막막합니다.
누군가 올바른 방향으로 안내해 주시거나 이 정보를 얻는 더 나은 방법이 있다면 제안해 주시면 감사하겠습니다!
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 */)
네, 저도 그렇게 생각했어요. 이 문제를 해결하기에는 초기 쿼리만으로도 충분했지만, 향후를 위해 투표 결과 쿼리에 이메일이 반환되는 것은 유용할 것입니다.
제안해 주신 대로 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
이것을 다음과 같이 단순화할 수 있을 것 같습니다 (또한 데이터 탐색기의 마법 같은 기능도 활용하고요):
-- [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을 붙여넣으면 해당 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 테이블을 다시 추가해야 합니다.