هذا هو إصدار SQL لتقرير لوحة المعلومات لملاحظات المستخدم.
يتطلب هذا التقرير تمكين المكون الإضافي Discourse User Notes.
يسرد تقرير لوحة المعلومات هذا ملاحظات المستخدم التي أنشأها موظفون في نطاق تاريخي محدد. ملاحظات المستخدم هي تعليقات أو ملاحظات إضافية يضيفها المشرفون أو المسؤولون إلى ملف تعريف المستخدم، وغالبًا ما تُستخدم لتتبع سلوك المستخدم أو مشكلاته أو معلومات مهمة عنه.
-- [params]
-- date :start_date = 2024-01-07
-- date :end_date = 2024-02-08
WITH user_notes AS (
SELECT
REPLACE(key, 'notes:', '')::int AS user_id,
notes.value->>'created_at' AS created_at,
notes.value->>'raw' AS user_note,
notes.value->>'created_by' AS created_by
FROM plugin_store_rows,
LATERAL json_array_elements(value::json) notes
WHERE plugin_name = 'user_notes'
ORDER BY 2 DESC
)
SELECT
un.user_id,
un.created_by AS moderator_user_id,
un.created_at::date,
un.user_note as html$user_note
FROM user_notes un
JOIN users u ON u.id = un.user_id
WHERE un.created_at BETWEEN :start_date AND :end_date
ORDER BY un.created_at ASC
شرح استعلام SQL
يستخرج هذا التقرير هذه الملاحظات من جدول plugin_store_rows، حيث يتم تخزينها بتنسيق JSON بواسطة المكون الإضافي user_notes، ويعرضها بتنسيق سهل الفهم.
يعمل الاستعلام في عدة خطوات:
- المعلمات:
- يبدأ الاستعلام بتعريف معلمتين،
:start_dateو:end_date، لتحديد الفترة الزمنية للتقرير. تقبل كلتا معلمتي التاريخ تنسيقYYYY-MM-DD.
- يبدأ الاستعلام بتعريف معلمتين،
- التعبير الجدولي المشترك (CTE) -
user_notes: يبدأ الاستعلام بـ CTE يسمىuser_notesيستخرج ويحول البيانات ذات الصلة من جدولplugin_store_rows. يخزن هذا الجدول بيانات المكونات الإضافية المختلفة بتنسيق مفتاح-قيمة، حيث يتم مسبوق المفتاح لملاحظات المستخدم بـnotes:متبوعًا بمعرف المستخدم. يقوم CTE بتنفيذ العمليات التالية:- يقوم بتصفية الصفوف حيث يكون
plugin_nameهو'user_notes'، مما يضمن تحديد بيانات ملاحظات المستخدم فقط. - يستخدم الدالة
json_array_elementsفي انضمام جانبي لتوسيع مصفوفة JSON المخزنة في العمودvalueإلى كائنات JSON فردية، يمثل كل منها ملاحظة. - يستخرج معرف المستخدم من المفتاح عن طريق إزالة البادئة
notes:وتحويل النتيجة إلى عدد صحيح. - يستخرج تاريخ إنشاء الملاحظة، ومحتوى الملاحظة الخام، ومعرف المستخدم الذي أنشأ الملاحظة من كائن JSON.
- يقوم بتصفية الصفوف حيث يكون
- الاستعلام الرئيسي:
- ينضم CTE
user_notesمع جدولusersلضمان تضمين الملاحظات للمستخدمين الحاليين فقط. - يقوم بتصفية الملاحظات بناءً على تاريخ
created_atلتضمين تلك الموجودة ضمن النطاق الزمني المحدد (:start_dateإلى:end_date) فقط. - يحدد معرف المستخدم، ومعرف المستخدم المشرف (منشئ الملاحظة)، وتاريخ إنشاء الملاحظة، ومحتوى الملاحظة.
- يقوم بترتيب النتائج حسب تاريخ إنشاء الملاحظة بترتيب تصاعدي لتقديم الملاحظات بترتيب زمني.
- ينضم CTE
نتائج مثال
| مستخدم | مشرف | تاريخ الإنشاء | ملاحظة المستخدم |
|---|---|---|---|
| user_1 | staff_user_2 | 2024-01-10 | example user note with HTML formatting |
| user_3 | staff_user_4 | 2024-01-14 | this is an example note about user_3 |
| … | … | … | … |