مرحباً يا أصدقاء!
أقوم بتجربة بعض استعلامات الشارات هنا
بعضها يعمل بشكل جيد والبعض الآخر لا يزال قيد التجربة.
هل يعرف أحد كيفية إنشاء استعلام يمنح شارة لمستخدم لديه عدد معين من المشاهدات في المواضيع التي أنشأها في فئة محددة؟ تمكنت من بناء هذا الاستعلام، لكنه يخص موضوعاً واحداً (حصل المستخدم على ما لا يقل عن X مشاهدة في موضوع معين ضمن فئة محددة). الكود هو:
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 'Technology'
) AND p.post_number = 1
AND views >= 10
and (:backfill OR ( p.id IN (:post_ids) ))
GROUP BY p.user_id
ولكن بدلاً من موضوع واحد فقط، أود منح الشارة لأولئك الذين يحصلون، على سبيل المثال، على 500 مشاهدة كمجموع المشاهدات من جميع المواضيع التي أنشأها هذا الشخص في الفئة Y. هل يعرف أحد كيفية تحقيق ذلك؟ 
ربما تكون هذه حلاً (اختبارات إضافية قادمة :D)
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 'Technology'
) AND p.post_number = 1
and (:backfill OR ( p.id IN (:post_ids) ))
GROUP BY p.user_id
HAVING SUM (views) > XXXXXXXXXXX
مرحبًا يا أصدقاء، لقد نجحت في اختبار هذا الاستعلام أعلاه وعمل بنجاح! الآن، أتساءل عما إذا كان بإمكان أحدكم مساعدتي في تحدٍ آخر. هذا هو الاستعلام:
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 'Arts'
) AND p.post_number = 1
and (:backfill OR ( p.id IN (:post_ids) ))
GROUP BY p.user_id
HAVING SUM (views) >= 100
في هذا المثال: المستخدم الذي ينشئ قصصًا في فئة “الفنون” وتصل تلك القصص إلى 100 مشاهدة، سيحصل على الشارة. والمشكلة هي أنني سأحتاج إلى تغيير هذا المنطق مع مرور الوقت، لأن عدد المشاهدات سيزداد.
هذه الشارة تتطلب اليوم 100 مشاهدة، لكنها قد تتطلب 1000 مشاهدة بعد 6 أشهر.
المشكلة تكمن في أنه عند تغيير الاستعلام، يتم تنفيذه مرة أخرى كل يوم، مما يؤدي إلى فقدان المستخدمين الذين حصلوا بالفعل على الشارة.
وهذا سيكون كارثيًا؛ تخيل أنك حققت (في بداية المنصة) 10 مشاهدات وحصلت على شارة المستوى 2 في فئة التكنولوجيا. ولكن بعد بضعة أشهر، تنمو المنصة ويصبح شرط المستوى 2 الآن 100 مشاهدة بدلاً من 10، فتفقد الشارة.
هل توجد طريقة لمنع حدوث ذلك؟