هذا هو إصدار SQL لتقرير لوحة المعلومات الخاص بردود الفعل.
يقدم هذا التقرير عددًا يوميًا لجميع الإعجابات وردود الفعل على المنشورات عبر موقع ما خلال نطاق زمني محدد.
يساعد هذا التقرير في تقديم لمحة عن تفاعل المستخدمين داخل مجتمع Discourse من خلال قياس تكرار رموز ردود الفعل المختلفة والإعجابات على المنشورات. من خلال تحليل استخدام رموز ردود الفعل المختلفة، يمكن للمسؤولين الحصول على رؤى حول عدد المرات التي يتفاعل فيها المستخدمون مع المحتوى، والاستجابات العاطفية للمستخدمين للمنشورات، وتحديد رموز ردود الفعل الشائعة وغير المستخدمة.
يتطلب هذا التقرير تمكين إضافة Discourse Reactions على موقعك. ستعتمد ردود الفعل المتاحة في التقرير على ردود الفعل المحددة التي تم تمكينها باستخدام إعداد الموقع
discourse_reactions_enabled_reactions.
-- [params]
-- date :start_date = 2023-12-16
-- date :end_date = 2024-01-17
SELECT
r.day,
COALESCE(l.likes_count, 0) as likes_count,
sum(case when reaction_value = 'laughing' then reactions_count else 0 end)::int as laughing,
sum(case when reaction_value = 'cry' then reactions_count else 0 end)::int as cry,
sum(case when reaction_value = 'exploding_head' then reactions_count else 0 end)::int as exploding_head,
sum(case when reaction_value = 'clap' then reactions_count else 0 end)::int as clap,
sum(case when reaction_value = 'confetti_ball' then reactions_count else 0 end)::int as confetti_ball,
sum(case when reaction_value = 'hugs' then reactions_count else 0 end)::int as hugs,
sum(case when reaction_value = 'chefs_kiss' then reactions_count else 0 end)::int as chefs_kiss,
sum(case when reaction_value = '100' then reactions_count else 0 end)::int as one_hundred,
sum(case when reaction_value = '+1' then reactions_count else 0 end)::int as plus_one,
sum(case when reaction_value = 'rocket' then reactions_count else 0 end)::int as rocket,
sum(case when reaction_value = 'star_struck' then reactions_count else 0 end)::int as star_struck,
sum(case when reaction_value = 'eyes' then reactions_count else 0 end)::int as eyes,
sum(case when reaction_value = 'discourse' then reactions_count else 0 end)::int as discourse
FROM (
SELECT
date_trunc('day', drru.created_at)::date as day,
drr.reaction_value,
count(drru.id) as reactions_count
FROM discourse_reactions_reactions as drr
LEFT OUTER JOIN discourse_reactions_reaction_users as drru on drr.id = drru.reaction_id
WHERE drr.reaction_users_count IS NOT NULL
AND drru.created_at::date >= :start_date::date AND drru.created_at::date <= :end_date::date
GROUP BY drr.reaction_value, day
) r
LEFT JOIN (
SELECT
count(pa.id) as likes_count,
date_trunc('day', pa.created_at)::date as day
FROM post_actions as pa
WHERE pa.post_action_type_id = 2
AND pa.created_at::date >= :start_date::date AND pa.created_at::date <= :end_date::date
GROUP BY day
) l ON r.day = l.day
GROUP BY r.day, l.likes_count
ORDER BY r.day
شرح استعلام SQL
المعلمات
- يقبل الاستعلام معلمتين،
:start_dateو:end_date، اللتين تحددان النطاق الزمني للتقرير. تقبل كلتا معلمتي التاريخ تنسيق التاريخYYYY-MM-DD.
هيكل الاستعلام
- الاستعلام الداخلي (ردود الفعل): يبدأ الاستعلام باستعلام فرعي يحدد التاريخ (
day) ونوع رد الفعل (reaction_value) وعدد ردود الفعل (reactions_count) من جدولdiscourse_reactions_reactionsالمرتبط بـdiscourse_reactions_reaction_usersعبرreaction_id. يضمن هذا الارتباط أننا نحسب ردود الفعل الخاصة بالمستخدم. - التجميع حسب أنواع ردود الفعل: يتم بعد ذلك تجميع البيانات المحددة حسب
dayوreaction_value، مع تقييد النطاق بالتواريخ المحددة للبداية والنهاية. يُستخدم هذا لحساب العدد الإجمالي لكل نوع من ردود الفعل لكل يوم في النطاق الزمني المحدد. - فرز إجمالي ردود الفعل: لكل نوع من ردود الفعل، يستخدم الاستعلام عبارة
CASEلتجميع عدد المرات التي تم فيها استخدام رد الفعل المحدد وتحويل النتيجة إلى عدد صحيح لعد نظيف. - قد تحتاج إلى تعديل
reaction_value = '...'في هذا القسم اعتمادًا على ردود الفعل التي تم تمكينها على موقعك. - الاستعلام الفرعي لعدد الإعجابات: يُستخدم استعلام فرعي منفصل لحساب العدد الإجمالي للإعجابات (
likes_count) لكل يوم باستخدام جدولpost_actionsحيث يتوافقpost_action_type_idمع الإعجابات. - دمج البيانات: يجمع الاستعلام الخارجي بعد ذلك بين حساب الإعجابات وعدد ردود الفعل عن طريق الربط في حقل
day. - الاختيار النهائي: يقوم
SELECTالخارجي بإنشاء الإخراج النهائي معdayوعدد الإعجابات (likes_count) وعدد كل نوع من ردود الفعل. إذا لم تكن هناك بيانات للإعجابات في يوم معين، تضمن الدالةCOALESCEعرض صفر بدلاً منNULL. - ترتيب النتائج: يتم ترتيب النتائج حسب التاريخ (
r.day) لإنشاء سلسلة زمنية للتفاعل على الموقع.
الأعمدة
day: التاريخ الذي تم فيه حساب ردود الفعل والإعجابات.likes_count: العدد الإجمالي للإعجابات لكل يوم.- كل نوع من ردود الفعل (ضحك، بكاء، رأس متفجر، إلخ): أعمدة فردية تعرض العدد الإجمالي لكل نوع من ردود الفعل في اليوم.
نتائج مثال
| day | likes_count | laughing | cry | exploding_head | clap | confetti_ball | hugs | chefs_kiss | one_hundred | plus_one | rocket | star_struck | eyes | discourse |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2023-12-16 | 13 | 0 | 3 | 0 | 3 | 1 | 0 | 0 | 0 | 5 | 2 | 2 | 1 | 0 |
| 2023-12-17 | 17 | 1 | 0 | 2 | 2 | 0 | 0 | 0 | 0 | 4 | 4 | 1 | 2 | 0 |
| 2023-12-18 | 46 | 0 | 1 | 0 | 6 | 0 | 1 | 3 | 0 | 27 | 3 | 4 | 5 | 0 |