هذا هو إصدار 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: قيمة منطقية تحدد ما إذا كان سيتم تضمين الفئات الفرعية للفئة المحددة في العد.
تفصيل الاستعلام
- تعبير الجدول المشترك المتكرر (
subcategories):- يبدأ هذا التعبير بتحديد الفئة بالمعرف الذي يوفره المعلمة
:category_id. - ثم يحدد بشكل متكرر جميع الفئات الفرعية لتلك الفئة عن طريق ربط جدول
categoriesبتعبيرsubcategoriesCTE عبر حقلparent_category_id. - النتيجة هي قائمة بجميع الفئات الفرعية (بما في ذلك الفئة الأولية) التي سيتم استخدامها للتصفية.
- يبدأ هذا التعبير بتحديد الفئة بالمعرف الذي يوفره المعلمة
- الاستعلام الرئيسي:
- يحدد الاستعلام عمودين: تاريخ إنشاء الإبلاغ (
flag_date) وعدد الإبلاغات (flags_count) لهذا التاريخ. - يربط جدول
reviewablesبجدولcategoriesلربط كل إبلاغ بفئته.
- يحدد الاستعلام عمودين: تاريخ إنشاء الإبلاغ (
- عوامل التصفية:
- يقوم الاستعلام بتصفية سجلات
reviewablesلتضمين فقط تلك من النوعReviewableFlaggedPost، والتي تمثل المنشورات التي تم الإبلاغ عنها. - يضمن أن تاريخ
created_atللإبلاغات يقع ضمن النطاق الزمني المحدد (:start_dateإلى:end_date). - يطبق عامل تصفية شرطي بناءً على المعلمات
:category_idو:include_subcategories:- إذا كان
:category_idيساوي 0، فلن يتم تطبيق أي عامل تصفية للفئة. - إذا كانت
:include_subcategoriesتساويtrue، فإن الاستعلام يتضمن الإبلاغات من الفئة الأولية وجميع فئاتها الفرعية. - إذا كانت
:include_subcategoriesتساويfalse، فإن الاستعلام يتضمن الإبلاغات فقط من الفئة الأولية.
- إذا كان
- يقوم الاستعلام بتصفية سجلات
- التجميع والترتيب:
- يتم تجميع النتائج حسب تاريخ إنشاء الإبلاغ لتوفير عدد لكل يوم.
- يتم ترتيب النتائج حسب التاريخ لعرض البيانات بتسلسل زمني.
نتائج مثال
| flag_date | flags_count |
|---|---|
| 2023-11-19 | 2 |
| 2023-11-22 | 1 |
| 2023-11-23 | 1 |
| 2023-11-24 | 2 |
| 2023-11-26 | 1 |
| … | … |