هذا هو إصدار 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 |
| … | … |