هذا مثال جيد لبعض الخصائص الفريدة لبيانات Discourse التي يمكن أن تساعدك في الحصول على نتائج أكثر دقة عند بناء استعلاماتك.
نظرًا لأن معظم المشاركات والمواضيع يتم “حذفها بشكل ناعم” عند حذفها، فهذا يعني أنها ستظل تظهر في قاعدة البيانات ويمكن تضمينها في إحصائيات التقارير المخصصة، لذا يمكن أن يساعد ذلك في تصفيتها من أي نتائج قد ترغب في استخلاصها لإحصائيات المستخدم أو الفئة، على سبيل المثال. بنفس الطريقة، قد ترغب أيضًا في استبعاد الرسائل الشخصية من إحصائياتك، بالإضافة إلى مستخدمي النظام.
إليك بعض النصائح حول كيفية تصفيتها:
يُستخدم استعلام SQL هذا للحصول على أفضل 10 مستخدمين (باستثناء مستخدمي النظام) الذين قاموا بأكبر عدد من المشاركات العامة، مع استبعاد أي مشاركات، أو مشاركات من مواضيع، تم حذفها.
-- تحديد user_id من جدول posts وعدّ عدد المشاركات التي قام بها كل مستخدم
SELECT
p.user_id,
COUNT(p.id) AS "عدد المشاركات"
FROM posts p
-- ربط يساري مع جدول topics بناءً على topic_id
LEFT JOIN topics t ON t.id = p.topic_id
WHERE
-- استبعاد مواضيع الرسائل الخاصة
t.archetype <> 'private_message'
-- استبعاد المواضيع التي تم حذفها
AND t.deleted_at ISNULL
-- استبعاد المشاركات التي تم حذفها
AND p.deleted_at ISNULL
-- استبعاد الهمسات، مشاركات الإجراءات الصغيرة، ومشاركات المشرفين
AND p.post_type = 1
-- استبعاد المشاركات التي قام بها مستخدم النظام و discobot (user_id 0 و -1)
AND p.user_id > 0
-- تجميع النتائج حسب user_id
GROUP BY 1
-- ترتيب النتائج حسب عدد المشاركات بترتيب تنازلي
ORDER BY 2 DESC
-- تحديد النتائج لأفضل 10 مستخدمين بأكبر عدد من المشاركات
LIMIT 10
وهنا بدون التعليقات المضمنة:
SELECT
p.user_id,
COUNT(p.id) AS "عدد المشاركات"
FROM posts p
LEFT JOIN topics t ON t.id = p.topic_id
WHERE t.archetype <> 'private_message'
AND t.deleted_at ISNULL
AND p.deleted_at ISNULL
AND p.post_type = 1
AND p.user_id > 0
GROUP BY 1
ORDER BY 2 DESC
LIMIT 10
هذا مجرد استعلام بسيط لتوضيح الأمثلة، ولكن نأمل أن يساعدك هذا في البدء باستخدام مستكشف البيانات.
إذا كانت لديك أي أسئلة، فيرجى طرحها أدناه. ![]()