هذا هو إصدار SQL لتقرير لوحة المعلومات لإعلام المستخدم.
يوفر تقرير لوحة المعلومات هذا عددًا يوميًا لعدد المرات التي تم فيها إخطار المستخدمين بشكل خاص بواسطة علامة على أحد منشوراتهم.
-- [params]
-- date :start_date = 2023-12-15
-- date :end_date = 2024-01-16
SELECT
DATE(created_at) AS day,
COUNT(1) AS notifications_count
FROM topics
WHERE archetype = 'private_message'
AND subtype = 'notify_user'
AND created_at BETWEEN :start_date AND :end_date
AND deleted_at IS NULL
AND user_id > 0
GROUP BY DATE(created_at)
ORDER BY day
شرح استعلام SQL
يعمل الاستعلام عن طريق استخراج البيانات من جدول topics - على وجه التحديد، تلك التي تتأهل كرسائل خاصة للمستخدمين بنوع فرعي notify_user ضمن إطار زمني محدد. دعنا نفصل ذلك:
- معلمات التاريخ:
- يقبل الاستعلام معلمتين،
:start_dateو:end_date، اللتين تحددان النطاق الزمني للتقرير. تقبل كلتا معلمتي التاريخ تنسيق التاريخYYYY-MM-DD.
- يقبل الاستعلام معلمتين،
- الاختيار والعد:
DATE(created_at)يحول الطابع الزمنيcreated_atإلى تنسيق تاريخ ويسميهday. هذا يسمح بتجميع الرسائل وعدها حسب اليوم الذي تم إنشاؤها فيه.- يتم استخدام
COUNT(1)لعد عدد الإدخالات لكل يوم، وتسمية هذا العددnotifications_count.
- معايير التصفية:
- يقوم الاستعلام بتصفية الإدخالات فقط حيث يكون
archetypeهو'private_message'، مما يضمن أننا ننظر فقط إلى الرسائل وليس إلى أنواع أخرى من المواضيع. - يتم تقييد
subtypeإلى'notify_user'، مما يعزل الحالات التي تم فيها إخطار المستخدمين بشأن المشاركات التي تم وضع علامة عليها. - يتحقق من أن الطابع الزمني
created_atللرسالة يقع بين:start_dateو:end_dateالمحددين. - يتم استبعاد الرسائل التي تم حذفها (
deleted_at IS NULL) من العد لضمان أن التقرير يعكس الاتصالات النشطة فقط. - أخيرًا، يضمن أن الرسائل مرتبطة بمستخدم صالح عن طريق التأكد من أن
user_id > 0.
- يقوم الاستعلام بتصفية الإدخالات فقط حيث يكون
- التجميع والترتيب:
- يستخدم الاستعلام
GROUP BY DATE(created_at)لتجميع النتائج حسب كل يوم ضمن النطاق الزمني المحدد. - ثم يقوم بترتيب النتائج زمنيًا باستخدام
ORDER BY day، مما يجعل التقرير سهل القراءة والتفسير.
- يستخدم الاستعلام
نتائج مثال
| day | notifications_count |
|---|---|
| 2023-12-17 | 1 |
| 2023-12-18 | 1 |
| 2023-12-21 | 1 |
| 2023-12-23 | 1 |
| 2023-12-26 | 1 |