أسهل طريقة لتصدير قائمة ببريد المستخدمين حسب المعرف أو اسم المستخدم؟

مرحباً،

أعتذر إذا كانت هذه المعلومات موجودة في مكان آخر، لقد بحثت ولكن لم أتمكن من العثور على إجابة قاطعة.

أحاول معرفة أسهل طريقة للعثور على البريد الإلكتروني للمستخدم باستخدام اسم المستخدم أو معرف المستخدم الخاص به بشكل جماعي. أنا مسؤول موقعي، لذا لدي الأذونات، وأنا على علم بأنه يمكنني العثور على هذه المعلومات في ملف تعريف المستخدم. ومع ذلك، أحتاج إلى القيام بذلك لآلاف المستخدمين المحتملين.

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

أعتقد أنه يمكنك إنشاء واحد أكثر ذكاءً سيقوم بملء “قائمة المستخدمين” بتحديد آخر.

امنحه الاستعلام من نتائج الاستطلاع واسأل عما إذا كان بإمكانه دمجهما.

إعجاب واحد (1)

نعم، فكرت في ذلك أيضًا. كان الاستعلام الأولي هو كل ما احتجته لحل هذه المشكلة، ولكن وجود رسائل البريد الإلكتروني التي تم إرجاعها في استعلام نتائج الاستطلاع سيكون مفيدًا للمستقبل.

لقد مضيت قدمًا وجعلت الذكاء الاصطناعي يفعل ما اقترحته. مع قليل من التعديل (لجعل الاستطلاع المحدد قابلاً للتحديد)، حصلت على ما يلي:

-- [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 بلصق عنوان 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 مرة أخرى للحصول على النسخة النصية لاسم المستخدم.

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