هذا هو إصدار SQL من تقرير لوحة المعلومات للحلول المقبولة.
يقدم هذا التقرير عدد المشاركات التي تم تمييزها كحلول على أساس يومي ضمن نطاق تاريخي محدد. إنه مفيد لفهم مدى تكرار عثور المستخدمين على إجابات لأسئلتهم وتمييزها كحلول بمرور الوقت.
-- [params]
-- date :start_date = 2025-03-01
-- date :end_date = 2025-04-01
-- null category_id :category_id
WITH daily_solutions AS (
SELECT
DATE(st.created_at) AS solution_date,
COUNT(*) AS solution_count
FROM discourse_solved_solved_topics st
JOIN posts p ON p.id = st.answer_post_id AND p.deleted_at IS NULL
JOIN topics t ON t.id = st.topic_id
AND t.archetype <> 'private_message'
AND t.deleted_at IS NULL
AND (:category_id IS NULL OR t.category_id = :category_id)
JOIN users u ON u.id = p.user_id
WHERE
st.created_at BETWEEN :start_date AND :end_date
AND u.id > 0
AND u.active
AND u.silenced_till IS NULL
AND u.suspended_till IS NULL
GROUP BY DATE(st.created_at)
)
SELECT
solution_date,
solution_count
FROM daily_solutions
ORDER BY solution_date
شرح استعلام SQL
يستخدم هذا الاستعلام الجدول discourse_solved_solved_topics الذي تم تقديمه في discourse-solved PR #352:
- المعلمات: يقبل الاستعلام:
- معلمات
:start_dateو:end_dateبتنسيقYYYY-MM-DDمع قيم افتراضية. :category_idاختياري للتصفية حسب فئة معينة.
- معلمات
- التعبير الجدولي المشترك: يستخدم CTE يسمى
daily_solutionsلتنظيم المنطق. - الربط (Joins):
posts- يضمن أن منشور الحل لا يزال موجودًا ولم يتم حذفه.topics- يضمن أن الموضوع موجود، وليس رسالة خاصة، ولم يتم حذفه.users- يتحقق من أن ناشر الحل هو مستخدم صالح.
- التصفية: عبارة
WHERE:- يقتصر على النطاق الزمني المحدد.
- يضمن أن المستخدمين نشطون، وليسوا صامتين، وليسوا معلقين.
- يسمح بالتصفية الاختيارية حسب الفئة.
- التجميع والترتيب: يتم التجميع حسب التاريخ والترتيب زمنيًا.
ستكون نتيجة هذا الاستعلام قائمة بالتواريخ مع العدد المقابل للمشاركات التي تم تمييزها كحلول في كل من تلك التواريخ.
نتائج مثال
| day | accepted_solutions |
|---|---|
| 2023-11-14 | 16 |
| 2023-11-15 | 5 |
| 2023-11-16 | 10 |
| 2023-11-17 | 4 |
| 2023-11-18 | 2 |
| … | … |