IDまたはユーザー名でユーザーメールリストを書き出す一番簡単な方法?

こんにちは。

情報がどこかにあるかもしれませんが、確実な答えが見つからなかったので、もしそうであれば申し訳ありません。

ユーザー名またはユーザーIDのいずれかを使用して、ユーザーのメールアドレスを一括で見つける最も簡単な方法を把握しようとしています。私はサイトの管理者なので、権限はありますが、ユーザーのプロフィールでこの情報を見つけることができることは承知しています。しかし、潜在的に数千人のユーザーに対してこれを行う必要があります。

状況は、残念ながら、投票を実施していた際に投票するために数千のボットアカウントが作成されたということです。そして、勝者を適切に決定するために最終的なカウントを正確に絞り込む必要があります。Poll results reportのData Explorerクエリを使用して投票結果を取得しましたが、ユーザーのメールアドレスは返されませんでした。IDまたはユーザー名のリストを受け取り、対応するメールのリストを返す別のクエリをData Explorerプラグイン用に記述することは可能だと推測しますが、SQLの知識がないため、解決方法を見つけるのに少し困っています。

誰かが私を正しい方向に向かわせたり、この情報を取得するためのより良い提案があれば、感謝します!

ありがとうございます。

https://ask.discourse.com/ にアクセスし、クエリを入力して、ユーザーメールが必要であることを伝えてください(ユーザー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

「ユーザーリスト」を別のSELECT文で埋める、より巧妙なものを作成できると思います。投票結果からのクエリをそれに与え、それらを結合できるか尋ねてください。

「いいね!」 1

ええ、私もそう思いました。最初のクエリで問題を解決できましたが、投票結果クエリでメールが返されるようになると、将来的に役立つでしょう。

AIに提案通りにやらせてみました。少し調整して(特定の投票を選択できるように)、以下のようになりました。

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

SELECT polls.name AS "投票名",
       poll_options.html AS "回答",
       poll_votes.user_id AS "ユーザーID",
       users.username AS "ユーザー名",
       user_emails.email AS "メールアドレス"
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

うまくいっているようです。アドバイスありがとうございました!

AIに何をさせるかを私に伝えるのは、次のレベルの雰囲気コーディングですね!: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 パラメータのタイプを使用すると、投稿の URL を貼り付けて、その post_id を取得できます(例: https://meta.discourse.org/t/export-a-list-of-user-emails-by-user-id/373768/5)。また、投稿内のほとんどの単一の投票は、2番目の投票が同じ投稿に追加される(または手動で追加される)まで、単純に「poll」と呼ばれます。そのため、:poll_name のデフォルトとしてこれを含めることは便利だと思われます。

また、user_id にはいくつかのマジックがあり、アバターとユーザー名が表示され、単純なユーザー ID ではなく、ユーザーカード/プロフィールへのリンクになります。結果を「オンサイト」で表示するには非常に便利ですが、エクスポートする場合は、テキストバージョンのユーザー名を取得するために users テーブルを再度追加する必要があります。

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