للحصول على استعلام مخصص يتم تشغيله، أعتقد أنه يجب أن تكون قادرًا على نسخ استعلام الحملة وتعديله ليعمل مع الشارات بدلاً من الدعوات.
هذا الاستعلام مخصص للحصول على 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 لتسريع الانتظار). ولكن آمل أن يمنحك ذلك نقطة انطلاق للبناء عليها.
هناك أيضًا بعض الأمثلة المختلفة هنا التي يمكنك استخدامها للإلهام، إذا لم تكن قد وجدتها بعد، Some common badge queries
> 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
يبدو أنك قمت بتشغيل ذلك في مستكشف البيانات. بالنسبة لشارات SQL المخصصة، ستحتاج إلى تشغيل إعداد الموقع المخفي وإضافة الاستعلام إلى صفحة الشارة:
ومع ذلك، لا يمكن للجميع القيام بذلك اعتمادًا على حزمة الاستضافة الخاصة بهم.
ولكن يمكن أيضًا إنشاء شارة من مستكشف البيانات إذا لم تتمكن من الحصول على شارات SQL المخصصة التي يتم تشغيلها. أعتقد أنه سيتعين عليك اتخاذ بعض القرارات بشأن عدد المرات التي قمت فيها بتشغيلها، وكيف سيتم منح الشارات من النتائج (يدويًا واحدة تلو الأخرى، أو من خلال منح جماعي)، ولكنها بالتأكيد قابلة للتنفيذ.
قد يكون شيء بسيط أفضل، على الرغم من أنك ربما ترغب في إضافة معلمة نطاق تاريخ أيضًا؟
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
هذا رائع. أجد أن نسخ استعلامات الشارات الموجودة وتعديلها مفيد جدًا لإعطائي فكرة عن مكان البدء. أنا متأكد من أنه يمكن تحسينها بشكل أكبر أيضًا إذا واجهت أي مشاكل معها.