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

هذا هو إصدار SQL لتقرير لوحة المعلومات للمنشورات.

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

--[params]
-- date :start_date
-- date :end_date

SELECT
    p.created_at::date AS "اليوم",
    COUNT(p.id) AS "العدد"
FROM posts p
INNER JOIN topics t ON t.id = p.topic_id AND t.deleted_at ISNULL
WHERE p.created_at::date BETWEEN :start_date AND :end_date
    AND p.deleted_at ISNULL
    AND t.archetype = 'regular'
    AND p.post_type = 1
GROUP BY p.created_at::date
ORDER BY 1

شرح استعلام SQL

  • المعلمات:
    • يقبل الاستعلام معلمتين، :start_date و :end_date، اللتين تحددان نطاق التاريخ للتقرير. تقبل كلتا معلمتي التاريخ تنسيق التاريخ YYYY-MM-DD.

يقوم استعلام SQL بتنفيذ العمليات التالية:

  • اختيار البيانات:
    • يحدد التاريخ (created_at::date) الذي تم فيه إنشاء كل منشور ويقوم بتحويله إلى تنسيق تاريخ لتجاهل مكون الوقت.
    • كما يحسب عدد المنشورات (COUNT(p.id)) التي تم إنشاؤها في كل تاريخ.
  • الربط:
    • يربط الاستعلام جدول posts بجدول topics باستخدام INNER JOIN. يضمن هذا الربط النظر فقط في المنشورات المرتبطة بالموضوعات الموجودة.
    • يقوم بتصفية أي موضوعات تم حذفها (t.deleted_at ISNULL).
  • عوامل التصفية:
    • يقوم بتصفية المنشورات لتشمل فقط تلك الموجودة ضمن نطاق التاريخ المحدد (p.created_at::date BETWEEN :start_date AND :end_date).
    • يستبعد المنشورات المحذوفة (p.deleted_at ISNULL).
    • يقيد النتائج بالمنشورات من الموضوعات العادية (t.archetype = 'regular').
    • يأخذ في الاعتبار فقط المنشورات من النوع p.post_type = 1، باستثناء إجراءات المشرف، والهمسات، والمنشورات الصغيرة.
  • التجميع والترتيب:
    • يتم تجميع النتائج حسب تاريخ إنشاء المنشور (GROUP BY p.created_at::date).
    • يتم ترتيب الإخراج النهائي حسب التاريخ بترتيب تصاعدي (ORDER BY 1)، حيث يشير 1 إلى العمود الأول في عبارة SELECT، وهو التاريخ.

نتائج مثال

اليوم العدد
2023-11-12 25
2023-11-13 35
2023-11-14 38
2023-11-15 47
2023-11-16 36
2023-11-17 79
إعجابَين (2)

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

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

نعم، يمكنك استخدام الاستعلام التالي لهذا الغرض:

--[params]
-- date :start_date
-- date :end_date
-- null category_id :category_id 
-- null user_id :user_id
-- boolean :include_subcategories = false

SELECT 
    u.username AS "المستخدم",
    p.created_at::date AS "التاريخ",
    COUNT(p.id) AS "العدد"
FROM posts p
INNER JOIN topics t ON t.id = p.topic_id AND t.deleted_at IS NULL
INNER JOIN users u ON p.user_id = u.id
LEFT JOIN categories c ON t.category_id = c.id
WHERE p.created_at::date BETWEEN :start_date AND :end_date
    AND p.deleted_at IS NULL
    AND t.archetype = 'regular'
    AND p.post_type = 1
    AND (
        :category_id IS NULL 
        OR t.category_id = :category_id
        OR (:include_subcategories AND c.parent_category_id = :category_id)
    )
    AND (:user_id IS NULL OR p.user_id = :user_id)
GROUP BY u.username, p.created_at::date
ORDER BY p.created_at::date ASC, u.username

المعلمات:

  • :start_date و :end_date: تحديد الإطار الزمني للتقرير (مطلوب)
  • :category_id: فلتر اختياري لفئة معينة
  • :user_id: فلتر اختياري لمستخدم معين
  • :include_subcategories: خيار لتضمين الفئات الفرعية للفئة المختارة

يوضح هذا الاستعلام:

  • المستخدم: اسم المستخدم لمؤلف المنشور
  • التاريخ: التاريخ التقويمي الذي تم فيه إنشاء المنشورات
  • العدد: عدد المنشورات التي أنشأها هذا المستخدم في ذلك التاريخ

بيانات مثال:

المستخدم التاريخ العدد
user 1 2023-01-01 3
user 2 2023-01-01 2
user 3 2023-01-01 1
user 1 2023-01-02 2
user 2 2023-01-02 3
user 1 2023-01-03 1
إعجابَين (2)

شكراً جزيلاً، هذا يساعد كثيراً!

إعجابَين (2)