هذا هو إصدار SQL من تقرير لوحة المعلومات للمواضيع.
يقدم هذا التقرير عدد المواضيع الجديدة التي تم إنشاؤها يوميًا ضمن نطاق تاريخ محدد. لا يتضمن التقرير الرسائل الشخصية، فقط المواضيع العادية المرئية في المنتدى.
--[params]
-- date :start_date
-- date :end_date
SELECT
p.created_at::date as day,
COUNT(p.id) AS topics_created
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.post_number = 1
AND p.user_id > 0
AND p.deleted_at ISNULL
AND t.archetype = 'regular'
GROUP BY p.created_at::date
ORDER BY p.created_at::date ASC
شرح استعلام SQL
يقوم استعلام SQL بتنفيذ الإجراءات التالية:
- تعريف المعلمات: يقبل معلمتين،
:start_dateو:end_date، اللتين تحددان نطاق التاريخ للتقرير. تقبل كلتا معلمتي التاريخ تنسيقYYYY-MM-DD. - اختيار البيانات: يختار الاستعلام تاريخ إنشاء المشاركات (
p.created_at) وعدد معرفات المشاركات (COUNT(p.id)) كـtopics_created. - الربط: يربط جدول
postsبجدولtopicsبناءً على حقولidالخاصة بهما، مع التأكد من مراعاة المواضيع غير المحذوفة فقط (t.deleted_at ISNULL). - عوامل التصفية: يقوم الاستعلام بتصفية المشاركات لتشمل فقط تلك التي:
- تم إنشاؤها ضمن نطاق التاريخ المحدد (
p.created_at::date BETWEEN :start_date AND :end_date). - هي المشاركة الأولى في موضوع (
p.post_number = 1)، مما يشير إلى بداية موضوع جديد. - تم إنشاؤها بواسطة مستخدمين مسجلين (
p.user_id > 0)، باستثناء مشاركات النظام. - لم يتم حذفها (
p.deleted_at ISNULL). - تنتمي إلى مواضيع من النوع ‘regular’ (
t.archetype = 'regular')، باستثناء الرسائل الشخصية.
- تم إنشاؤها ضمن نطاق التاريخ المحدد (
- التجميع: يتم تجميع النتائج حسب تاريخ إنشاء المشاركات (
p.created_at::date). - الترتيب: يتم ترتيب المخرجات النهائية حسب تاريخ الإنشاء بترتيب تصاعدي (
ORDER BY p.created_at::date ASC)، مما يوفر عرضًا زمنيًا لإنشاء المواضيع الجديدة.
نتائج مثال
| day | topics_created |
|---|---|
| 2023-11-11 | 18 |
| 2023-11-12 | 10 |
| 2023-11-13 | 21 |
| 2023-11-14 | 19 |
| 2023-11-15 | 22 |
| … | … |