تقرير لوحة التحكم - أعلام

هذا هو إصدار SQL من تقرير لوحة المعلومات الخاص بالإبلاغات

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

-- [params]
-- date :start_date = 2023-01-01
-- date :end_date = 2024-01-01
-- null int :category_id = 0
-- boolean :include_subcategories = false

WITH RECURSIVE subcategories AS (
    SELECT id FROM categories WHERE id = :category_id
    UNION ALL
    SELECT c.id FROM categories c
    INNER JOIN subcategories sc ON c.parent_category_id = sc.id
)

SELECT
    DATE(r.created_at) AS flag_date,
    COUNT(r.id) AS flags_count
FROM reviewables r
LEFT JOIN categories c ON r.category_id = c.id
WHERE r.type = 'ReviewableFlaggedPost'
    AND r.created_at::DATE BETWEEN :start_date AND :end_date
    AND (:category_id = 0 OR (
        :include_subcategories
        AND r.category_id IN (SELECT id FROM subcategories)
        OR NOT :include_subcategories
        AND r.category_id = :category_id
    ))
GROUP BY flag_date
ORDER BY flag_date

شرح استعلام SQL

تم تصميم استعلام SQL لحساب عدد الإبلاغات (التي يتم تمثيلها بسجلات ReviewableFlaggedPost في جدول reviewables) التي تم إنشاؤها في كل تاريخ ضمن النطاق الزمني والفئة المحددين. يستخدم تعبير جدول مشترك متكرر (CTE) لتضمين الفئات الفرعية للفئة المختارة اختياريًا.

المعلمات

  • :start_date: بداية النطاق الزمني لحساب الإبلاغات.
  • :end_date: نهاية النطاق الزمني لحساب الإبلاغات.
  • :category_id: معرف الفئة التي سيتم حساب الإبلاغات لها. إذا تم تعيينه على 0، فلن يتم تطبيق عامل التصفية على الفئة.
  • :include_subcategories: قيمة منطقية تحدد ما إذا كان سيتم تضمين الفئات الفرعية للفئة المحددة في العد.

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

  1. تعبير الجدول المشترك المتكرر (subcategories):
    • يبدأ هذا التعبير بتحديد الفئة بالمعرف الذي يوفره المعلمة :category_id.
    • ثم يحدد بشكل متكرر جميع الفئات الفرعية لتلك الفئة عن طريق ربط جدول categories بتعبير subcategories CTE عبر حقل parent_category_id.
    • النتيجة هي قائمة بجميع الفئات الفرعية (بما في ذلك الفئة الأولية) التي سيتم استخدامها للتصفية.
  2. الاستعلام الرئيسي:
    • يحدد الاستعلام عمودين: تاريخ إنشاء الإبلاغ (flag_date) وعدد الإبلاغات (flags_count) لهذا التاريخ.
    • يربط جدول reviewables بجدول categories لربط كل إبلاغ بفئته.
  3. عوامل التصفية:
    • يقوم الاستعلام بتصفية سجلات reviewables لتضمين فقط تلك من النوع ReviewableFlaggedPost، والتي تمثل المنشورات التي تم الإبلاغ عنها.
    • يضمن أن تاريخ created_at للإبلاغات يقع ضمن النطاق الزمني المحدد (:start_date إلى :end_date).
    • يطبق عامل تصفية شرطي بناءً على المعلمات :category_id و :include_subcategories:
      • إذا كان :category_id يساوي 0، فلن يتم تطبيق أي عامل تصفية للفئة.
      • إذا كانت :include_subcategories تساوي true، فإن الاستعلام يتضمن الإبلاغات من الفئة الأولية وجميع فئاتها الفرعية.
      • إذا كانت :include_subcategories تساوي false، فإن الاستعلام يتضمن الإبلاغات فقط من الفئة الأولية.
  4. التجميع والترتيب:
    • يتم تجميع النتائج حسب تاريخ إنشاء الإبلاغ لتوفير عدد لكل يوم.
    • يتم ترتيب النتائج حسب التاريخ لعرض البيانات بتسلسل زمني.

نتائج مثال

flag_date flags_count
2023-11-19 2
2023-11-22 1
2023-11-23 1
2023-11-24 2
2023-11-26 1
إعجاب واحد (1)