تقرير لوحة التحكم - تنبيه المستخدم

هذا هو إصدار 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
إعجاب واحد (1)