Badge query يعمل في explorer ولكن ليس في badge SQL؟

لدي الاستعلام أدناه، والذي يعمل في مستكشف البيانات، ولكني أحصل على الخطأ عذرًا، حدث خطأ. عند محاولة استخدام الاستعلام لتعيين شارات. هل هناك شيء فاتني هنا؟ يجب أن يتطابق الاستعلام إذا كان شخص ما عضوًا في مجموعة تسمى “chapter_” أو “meta_chapter_” وتم تعيينه كمجموعته الأساسية.

SELECT distinct on (u.id)
u.id
FROM users u
INNER JOIN groups g
ON u.primary_group_id = g.id
WHERE g.name LIKE 'chapter_%'
OR g.name LIKE 'meta_chapter_%'
إعجاب واحد (1)

بالنسبة للمشغلات المخصصة، تحتاج إلى إضافة سطر إضافي في البداية والنهاية. يوجد مثال في أحد منشوراتي أعلاه، ويمكنك العثور على مزيد من المعلومات في Creating triggered custom badge queries :+1:

3 إعجابات

شكرًا! أعتقد أنني بحاجة إلى إلقاء نظرة بعد نوم جيد ليلاً. لقد مر وقت طويل منذ أن استخدمت SQL، وأعتقد أنني بحاجة إلى التحقق من المزيد من الأمثلة والوثائق. الشيء أدناه لا يعمل، هذا بالتأكيد

SELECT ub.id, ub.granted_at, g.name
from user_badges ub
INNER JOIN groups g
ON ub.id = g.id
WHERE g.name LIKE 'chapter_%'
OR g.name LIKE 'meta_chapter_%'
AND (:backfill OR ub.id IN (:user_ids))

يؤدي هذا إلى هذا الخطأ، ربما أقوم بتمرير معلومات خاطئة أو اسم/عمود خاطئ.

ERROR:  column q.user_id does not exist
LINE 11:  JOIN users u on u.id = q.user_id

تعديل: آه نعم، يجب استخدام user_id من مكان ما، وليس id.


وكنتيجة نهائية، يتم تعيين هذه الشارات عند الانضمام إلى مجموعة تبدأ باسم chapter_ أو meta_chapter فيها.

SELECT distinct on (gu.user_id)
gu.user_id, gu.updated_at as granted_at
FROM group_users gu
INNER JOIN groups g
ON gu.group_id = g.id
WHERE g.name LIKE 'chapter_%'
OR g.name LIKE 'meta_chapter_%'
AND (:backfill OR gu.id IN (:user_ids))

وهذا إذا كنت في مجموعة تنتهي بـ -team في الاسم.

SELECT distinct on (gu.user_id)
gu.user_id, gu.updated_at as granted_at
FROM group_users gu
INNER JOIN groups g
ON gu.group_id = g.id
WHERE g.name LIKE '%-team'
AND (:backfill OR gu.id IN (:user_ids))
إعجاب واحد (1)