أعمل على استعلام SQL لمنح المستخدمين شارة عندما يمتلكون جميع الشارات في قائمة محددة (مثل المعرفات 3 و4 و5).
أعلم أن هذا الاستعلام للشارة يعمل مع شارة واحدة:
SELECT user_id, count(id) , current_timestamp granted_at
FROM user_badges
WHERE badge_id=4
GROUP BY user_id
لكن كيف يمكنني جعل هذا ينطبق على معرفات شارات متعددة؟ إضافة badge_id = X أخرى لن تعمل لأن هذا يبحث عن شارة واحدة. يبدو أن Intersect سيعمل لكنه غير مدعوم. سيتم تشغيل هذا الاستعلام يوميًا ولن يستهدف أي منشورات.
شكرًا!
أستخدم شيئًا مشابهًا لهذا لإنشاء مستوى مستخدم بديل لأعضائي.
يمكنك استبدال ib.badge_id بمعرف الشارة الذي يجب أن يحققه أعضاؤك.
SELECT user_id, CURRENT_TIMESTAMP granted_at, NULL post_id
FROM user_badges pb
WHERE badge_id = 1
AND EXISTS (
SELECT 1 FROM user_badges ib
WHERE pb.user_id = ib.user_id
AND ib.badge_id = 11
)
AND EXISTS (
SELECT 1 FROM user_badges ib
WHERE pb.user_id = ib.user_id
AND ib.badge_id = 124
)
AND EXISTS (
SELECT 1 FROM user_badges ib
WHERE pb.user_id = ib.user_id
AND ib.badge_id = 123
)
AND EXISTS (
SELECT 1 FROM user_badges ib
WHERE pb.user_id = ib.user_id
AND ib.badge_id = 127
)
AND EXISTS (
SELECT 1 FROM user_badges ib
WHERE pb.user_id = ib.user_id
AND ib.badge_id = 5
)