أعتذر إذا كانت هذه المعلومات موجودة في مكان آخر، لقد بحثت ولكن لم أتمكن من العثور على إجابة قاطعة.
أحاول معرفة أسهل طريقة للعثور على البريد الإلكتروني للمستخدم باستخدام اسم المستخدم أو معرف المستخدم الخاص به بشكل جماعي. أنا مسؤول موقعي، لذا لدي الأذونات، وأنا على علم بأنه يمكنني العثور على هذه المعلومات في ملف تعريف المستخدم. ومع ذلك، أحتاج إلى القيام بذلك لآلاف المستخدمين المحتملين.
الوضع هو أنه، للأسف، تم إنشاء آلاف الحسابات الروبوتية للتصويت في استطلاع كنا نجربه، وأحتاج إلى تقليص الأعداد النهائية بدقة لتحديد الفائزين بشكل مناسب. لقد استخدمت استعلام تقرير نتائج الاستطلاع في مستكشف البيانات لإرجاع نتائج التصويت للاستطلاع، ولكن ذلك لا يُرجع رسائل البريد الإلكتروني للمستخدمين. أفترض أنه سيكون من الممكن كتابة استعلام آخر لمكون مستكشف البيانات يمكنه أخذ قائمة بمعرفات أو أسماء مستخدمين وإرجاع قائمة مقابلة بالبريد الإلكتروني. لكنني لست على دراية بلغة 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 (/* list of user IDs here, e.g. 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
أعتقد أنه يمكن تبسيط هذا إلى شيء كهذا (والاعتماد أيضًا على بعض سحر مستكشف البيانات):
-- [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 لديه بعض السحر الخاص به بحيث يعرض صورة رمزية واسم مستخدم كرابط لبطاقة المستخدم/الملف الشخصي بدلاً من مجرد معرف المستخدم العادي نفسه. مفيد جدًا لعرض النتائج “على الموقع”، على الرغم من أنه إذا كنت تخطط لتصديرها، فستحتاج إلى إضافة جدول users مرة أخرى للحصول على النسخة النصية لاسم المستخدم.