إنشاء شارات ومُشغلات مخصصة

لذا كنت أقوم بإنشاء استعلام لشارة مخصصة. لقد أنشأت واحدة بنجاح وحفظتها سابقًا. عمل هذا الاستعلام دون أي أخطاء:

SELECT user_id, 0 post_id, current_timestamp granted_at 
FROM badge_posts  
WHERE (:backfill OR user_id IN (:user_ids) OR 0 NOT IN (:post_ids) )
GROUP BY user_id 
HAVING count(*) > 499

لقد حصلت عليه من هنا: Some common badge queries

المحفز الذي اخترته لهذا الاستعلام كان “بعد معالجة المنشور” بدلاً من “عندما يعدل المستخدم منشورًا أو ينشئه”. إذا قمت بتغيير المحفز إلى الأخير، فستظهر رسالة خطأ.

حاولت العثور على مزيد من المعلومات حول المحفزات المختلفة، والموضوع الوحيد الذي تمكنت من العثور عليه هو هنا: Creating triggered custom badge queries

تعتمد جميع استعلامات الشارات الخاصة بي تقريبًا على عدد المنشورات أو الردود أو إنشاء مواضيع في فئة معينة.

أحاول فهم الفرق بين هذه المحفزات الثلاثة الثلاثة ومتى يتم اختيارها بناءً على الاستعلام:

  1. بعد معالجة المنشور
  2. عندما يتصرف المستخدم تجاه منشور
  3. عندما يعدل المستخدم منشورًا أو ينشئه

لماذا حصلت على خطأ عند اختيار #3 كمحفز ولكن ليس عند اختيار #1

حاولت إنشاء استعلام شارة آخر باستخدام هذا الاستعلام:

SELECT p.user_id, min(p.created_at) granted_at, MIN(p.id) post_id
FROM badge_posts p
JOIN topics t ON t.id = p.topic_id
WHERE category_id = (
  SELECT id FROM categories WHERE name ilike 'foo'
) AND p.post_number = 1
GROUP BY p.user_id 

حيث ‘foo’ سيكون اسم الرابط (slug) لفئتي. هذه المرة، إذا تركت المحفز فارغًا أو اخترت “تحديث يوميًا”، سيتم الحفظ دون أي أخطاء. إذا قمت بتغيير المحفز إلى أي من الخيارات 1-3 أعلاه، سيظهر خطأ.

أعتقد أن السبب هو أن استعلام SQL يفتقر إلى معلومات حول كيفية تشغيله بناءً على :post_ids؟ إذا كنت محقًا، فكيف يمكنني إصلاح الاستعلام أعلاه بحيث لا يكون يوميًا بل يُفعّل مع كل منشور في فئة ‘foo’؟

أي شرح سيكون مُقدَّرًا، أو إشارة إلى مكان يمكنني القراءة فيه المزيد عن المحفزات.

4 إعجابات