أنا أعمل على إضافة مكون إضافي إلى مثيل Discourse الخاص بي يحدد ما إذا تم مؤخرًا عدد معين من العلامات في فئة. سيكون من المثالي أن يعيد عدد العلامات المعطاة في فئة على مدى فترة زمنية (مثل عدد العلامات في آخر 20 دقيقة لفئة بمعرف X).
أنا ألعب بالمكون الإضافي Data Explorer ، لكنني لست على دراية كبيرة بـ SQL ولست متأكدًا مما إذا كان ما أحاول القيام به ممكنًا. يبدو أنه يمكنني تحقيق ذلك على أساس كل منشور باستخدام جدول post_actions حيث يتم تخزين post_id لإجراءات المنشور. من الناحية المثالية ، سأحقق ذلك في استعلام واحد بدلاً من جمع عدد العلامات يدويًا للمنشورات الفردية في فئة.
ليس لدي مثيل قوي من Discourse متاح حيث يمكنني اختبار هذا بشكل شامل، ولكن أعتقد أن استعلام مستكشف البيانات هذا قد يوجهك في الاتجاه الصحيح. (ربما يمكن لشخص آخر المساعدة في تنقيحه!)
SELECT count(*)
FROM post_actions AS pac
JOIN posts p on p.id = pac.post_id
JOIN topics t on t.id = p.topic_id
WHERE pac.post_action_type_id in ('3','4','7','8')
AND pac.created_at >= NOW() - INTERVAL '20 MINUTE'
AND t.category_id = '4'
في هذا المثال، حددت الوقت منذ إنشاء العلامة بـ 20 دقيقة (السطر 6)، وهو ما قدمته في مثالك.
في السطر السابع، استخدمت معرف الفئة 4، ولكن ستحتاج إلى استخدام معرف الفئة المحدد للفئة التي تريد تتبعها.
إذا كنت ترغب في الإشارة إلى الفئة بالاسم، يمكنك إضافة ربط آخر إلى الاستعلام، ليبدو كالتالي:
SELECT count(*)
FROM post_actions AS pac
JOIN posts p on p.id = pac.post_id
JOIN topics t on t.id = p.topic_id
JOIN categories c on c.id = t.category_id
WHERE pac.post_action_type_id in ('3','4','7','8')
AND pac.created_at >= NOW() - INTERVAL '20 MINUTE'
AND c.name = 'General'
ثم استبدل حيث استخدمت General في السطر 8 باسم الفئة الخاصة بك. ضع في اعتبارك أن أسماء الفئات حساسة لحالة الأحرف.
إذا كنت مهتمًا، فقد أضفت حقولًا مخصصة يمكنك ملؤها:
--[params]
-- int_list :category_ids
-- text :interval = 20min
SELECT t.category_id, count(pa.id) count
from post_actions pa
INNER JOIN posts p on p.id = pa.post_id
INNER JOIN topics t on t.id = p.topic_id
WHERE post_action_type_id in (3, 4, 6, 7, 8)
AND t.category_id in (:category_ids)
AND pa.created_at >= now() - interval :interval
GROUP BY t.category_id
يمكنك إدخال معرفات فئات متعددة وفترات زمنية مخصصة (مثل 1 ساعة، 30 دقيقة، 3 أشهر، إلخ)
ملاحظة: لقد احتفظت بـ post_action_type_id 6، والذي أعتقد أنه يتعلق بتلقي المستخدم تحذيرًا؛ لست متأكدًا مما إذا كنت تريد احتسابه أيضًا؛ فلا تتردد في إزالته إذن.