عرض قائمة مدعوي الفعالية مع عناوين البريد الإلكتروني

:bookmark: هذا استعلام SQL لـ مستكشف البيانات يسترد قائمة بجميع المستخدمين الذين سجلوا حضورهم (RSVP’d) في حدث معين، إلى جانب عناوين بريدهم الإلكتروني الأساسية. وهو مفيد لمنسقي الفعاليات الذين يحتاجون إلى معلومات الاتصال بالحاضرين للمتابعات أو التذكيرات أو الاتصالات الخارجية.

:person_raising_hand: مستوى المستخدم المطلوب: مسؤول

:discourse2: يتطلب هذا الاستعلام تمكين إضافة التقويم (والأحداث).

ماذا يفعل هذا الاستعلام

إذا كنت تدير أحداثًا على موقع Discourse الخاص بك باستخدام إضافة التقويم (والأحداث)، فقد تحتاج إلى طريقة للحصول على قائمة كاملة بالحاضرين مع عناوين البريد الإلكتروني - على سبيل المثال، لإرسال إحاطة ما قبل الحدث، أو مشاركة اللوجستيات، أو المتابعة بعد الحدث.

تقوم ميزة “تصدير الحدث” المضمنة في قائمة الحدث بتنزيل قائمة بتسجيلات الحضور (RSVPs)، ولكن يتم تسليمها كملف مضغوط عبر رسالة خاصة. يمنحك استعلام مستكشف البيانات هذا بديلاً أسرع على الشاشة يتضمن عنوان البريد الإلكتروني الأساسي لكل حاضر، ويسمح لك بتصدير النتائج مباشرة إلى CSV أو JSON.

يعرض الاستعلام جميع المستخدمين الذين ردوا على حدث معين (بغض النظر عما إذا كانوا قد اختاروا “ذاهب”، “مهتم”، أو “لن يذهب”)، مرتبة أبجديًا حسب اسم المستخدم.

استعلام SQL

-- [params]
-- integer :event_topic_id = 23338

SELECT 
  u.id AS user_id,
  u.username,
  u.name,
  e.email
FROM users u
JOIN user_emails e ON u.id = e.user_id
JOIN discourse_post_event_invitees invitees ON u.id = invitees.user_id
JOIN posts p ON p.id = invitees.post_id
WHERE e.primary = true
AND p.topic_id = :event_topic_id
ORDER BY u.username

المعلمة

المعلمة النوع الوصف
:event_topic_id عدد صحيح مُعرِّف الموضوع للحدث الذي تريد سحب المدعوين منه. يمكنك العثور على هذا في عنوان URL لموضوع الحدث - على سبيل المثال، في discourse.example.com/t/my-event-topic/23338، يكون مُعرِّف الموضوع هو 23338.

كيف يعمل الاستعلام

يسحب هذا الاستعلام البيانات من أربع جداول قواعد بيانات ويجمعها لإنتاج قائمة واحدة:

  1. users — يحتوي على معلومات ملف تعريف المستخدم الأساسية مثل اسم المستخدم والاسم المعروض.
  2. user_emails — يخزن عناوين البريد الإلكتروني المرتبطة بكل مستخدم. يمكن أن يكون للمستخدم عدة عناوين بريد إلكتروني، لذلك يقوم الاستعلام بالتصفية فقط للحصول على البريد الإلكتروني الأساسي باستخدام e.primary = true.
  3. discourse_post_event_invitees — يسجل كل مستخدم رد على حدث (من خلال النقر على “ذاهب”، أو “مهتم”، أو “لن يذهب”). يربط كل سجل مستخدمًا بالمنشور الذي يحتوي على الحدث.
  4. posts — يربط منشور الحدث بالموضوع الأصلي، مما يسمح لك بالبحث عن المدعوين حسب مُعرِّف الموضوع بدلاً من الحاجة إلى معرفة مُعرِّف المنشور الداخلي.

تقوم عبارات JOIN بربط هذه الجداول معًا بحيث يتم تضمين المستخدمين الذين يظهرون فقط في قائمة المدعوين لموضوع الحدث المحدد. يتم فرز النتائج أبجديًا حسب اسم المستخدم.

نتائج المثال

user_id username name email
42 alice_m Alice Martinez alice@example.com
87 bob_jones Bob Jones bob@example.com
15 carol_w Carol Wu carol@example.com
63 david_k David Kim david@example.com

التصفية حسب حالة تسجيل الحضور (RSVP status)

يعرض الاستعلام أعلاه جميع المدعوين بغض النظر عن حالة تسجيل حضورهم. إذا كنت تريد فقط المستخدمين الذين وضعوا علامة “ذاهب”، يمكنك إضافة عامل تصفية للحالة إلى عبارة WHERE. يستخدم العمود status في جدول discourse_post_event_invitees القيم التالية:

رمز الحالة المعنى
0 ذاهب
1 مهتم
2 لن يذهب

على سبيل المثال، لعرض المستخدمين الذين هم “ذاهبون” فقط، أضف AND invitees.status = 0 إلى عبارة WHERE:

-- [params]
-- integer :event_topic_id = 23338

SELECT 
  u.id AS user_id,
  u.username,
  u.name,
  e.email
FROM users u
JOIN user_emails e ON u.id = e.user_id
JOIN discourse_post_event_invitees invitees ON u.id = invitees.user_id
JOIN posts p ON p.id = invitees.post_id
WHERE e.primary = true
AND p.topic_id = :event_topic_id
AND invitees.status = 0
ORDER BY u.username

يمكنك أيضًا عرض حالة تسجيل الحضور كتسمية قابلة للقراءة بدلاً من رقم عن طريق إضافة تعبير CASE:

CASE 
  WHEN invitees.status = 0 THEN 'Going'
  WHEN invitees.status = 1 THEN 'Interested'
  WHEN invitees.status = 2 THEN 'Not Going'
END AS rsvp_status

تشغيل الاستعلام

  1. انتقل إلى إدارة (Admin) > الإضافات (Plugins) > مستكشف البيانات (Data Explorer) (أو انتقل إلى /admin/plugins/discourse-data-explorer).
  2. انقر على زر + لإنشاء استعلام جديد.
  3. امنح الاستعلام اسمًا (على سبيل المثال، “مدعوو الحدث بالبريد الإلكتروني”).
  4. الصق SQL في محرر الاستعلام.
  5. انقر على تشغيل (Run)، ثم أدخل مُعرِّف موضوع الحدث عند الطلب.
  6. لتنزيل النتائج، انقر على زر CSV أو JSON بعد انتهاء الاستعلام من التشغيل.

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

المشكلات الشائعة والحلول

المشكلة الحل
يُرجع الاستعلام صفر نتائج تحقق مرة أخرى من أن مُعرِّف الموضوع صحيح وأن المستخدمين قد سجلوا حضورهم بالفعل في الحدث. يمكنك التحقق من خلال زيارة موضوع الحدث والتحقق من قائمة الحاضرين.
خطأ “relation discourse_post_event_invitees does not exist” لم يتم تثبيت إضافة التقويم (والأحداث) أو لم يتم تمكينها. يتطلب هذا الاستعلام أن تكون الإضافة نشطة.
ظهور صفوف مكررة في النتائج إذا كان لدى المستخدم سجلات بريد إلكتروني متعددة معلمة كـ أساسية (غير شائع، ولكنه ممكن)، فقد ترى تكرارات. يمكن أن يؤدي إضافة DISTINCT بعد SELECT إلى حل هذه المشكلة.