نعم، يمكنك استخدام الاستعلام التالي لهذا الغرض:
--[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 |
| … | … | … |