تم تعيين شارة بناءً على تخصيص شارات متعددة

مرحباً يا رفاق
أود تعيين شارة بناءً على عدد المرات التي يحصل فيها المستخدم على شارة معينة

  • حصل أليسيو على شارة foo 10 مرات على الأقل → تم الحصول على شارة Cool_foo
  • حصل لوكا على شارة foo 15 مرة على الأقل → تم الحصول على شارة Super_foo

هل هذا ممكن باستعلام SQL؟

إعجاب واحد (1)

هذا ممكن. :+1:

هل تمنحهم يدويًا (باستخدام مستكشف البيانات + الجائزة المجمعة) أم تقوم بتشغيلهم بواسطة SQL؟

كلاهما. معظمها يدوي ولكني أحاول أتمتة كل شيء

للحصول على استعلام مخصص يتم تشغيله، أعتقد أنه يجب أن تكون قادرًا على نسخ استعلام الحملة وتعديله ليعمل مع الشارات بدلاً من الدعوات.

هذا الاستعلام مخصص للحصول على 5 ‘شعار 108’، وسيتم ضبطه للتحديث يوميًا.

SELECT u.id user_id, current_timestamp granted_at
FROM users u
WHERE u.id IN (
    SELECT ub.user_id
    FROM user_badges ub
    WHERE ub.badge_id = 108
    GROUP BY ub.user_id
    HAVING COUNT(*) >= 4
) AND u.active AND u.silenced_till IS NULL AND u.id > 0 AND
    (:backfill OR u.id IN (:user_ids) )

لقد اختبرته لفترة وجيزة على موقع الاختبار الخاص بي ويبدو أنه يعمل بشكل جيد (أقوم بتشغيل مهمة Badge Grant sidekiq لتسريع الانتظار). ولكن آمل أن يمنحك ذلك نقطة انطلاق للبناء عليها. :slightly_smiling_face:

هناك أيضًا بعض الأمثلة المختلفة هنا التي يمكنك استخدامها للإلهام، إذا لم تكن قد وجدتها بعد، Some common badge queries :+1:

3 إعجابات

شكراً لك ولكن لدي خطأ في التثبيت الخاص بي

> ActiveRecord::PreparedStatementInvalid: missing value for :backfill in /*
>  * DataExplorer Query
>  * Query: /admin/plugins/explorer?id=13
>  * Started by: alefattorini
>  */
> WITH query AS (
> SELECT u.id user_id, current_timestamp granted_at 
> FROM users u 
> WHERE u.id IN ( 
>     SELECT ub.user_id 
>     FROM user_badges ub 
>     WHERE ub.badge_id = 102
>     GROUP BY ub.user_id 
>     HAVING COUNT(*) >= 1
> ) AND u.active AND u.silenced_till IS NULL AND u.id > 0 AND 
>     (:backfill OR u.id IN (:user_ids) )
> ) SELECT * FROM query
> LIMIT 1000

يبدو أن إزالة
(:backfill OR u.id IN (:user_ids) )

تعمل بشكل جيد أيضًا
هل هذا إلزامي؟

يبدو أنك قمت بتشغيل ذلك في مستكشف البيانات. بالنسبة لشارات SQL المخصصة، ستحتاج إلى تشغيل إعداد الموقع المخفي وإضافة الاستعلام إلى صفحة الشارة:

ومع ذلك، لا يمكن للجميع القيام بذلك اعتمادًا على حزمة الاستضافة الخاصة بهم.

ولكن يمكن أيضًا إنشاء شارة من مستكشف البيانات إذا لم تتمكن من الحصول على شارات SQL المخصصة التي يتم تشغيلها. :+1: أعتقد أنه سيتعين عليك اتخاذ بعض القرارات بشأن عدد المرات التي قمت فيها بتشغيلها، وكيف سيتم منح الشارات من النتائج (يدويًا واحدة تلو الأخرى، أو من خلال منح جماعي)، ولكنها بالتأكيد قابلة للتنفيذ.

قد يكون شيء بسيط أفضل، على الرغم من أنك ربما ترغب في إضافة معلمة نطاق تاريخ أيضًا؟

WITH foo AS (SELECT ub.user_id,count(ub.user_id), max(ub.granted_at) granted_at
FROM user_badges ub
WHERE ub.badge_id=108
GROUP BY ub.user_id)

SELECT user_id, granted_at
FROM foo
WHERE count >4
ORDER BY granted_at DESC

لقد قمت بتمكين هذا. إنه يعمل بشكل رائع :smiley: شكراً لك

إعجاب واحد (1)

هذا رائع. :slightly_smiling_face: أجد أن نسخ استعلامات الشارات الموجودة وتعديلها مفيد جدًا لإعطائي فكرة عن مكان البدء. أنا متأكد من أنه يمكن تحسينها بشكل أكبر أيضًا إذا واجهت أي مشاكل معها. :+1:

إعجاب واحد (1)

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.