¿Consulta de insignia funciona en explorer pero no en SQL de insignia?

Tengo la siguiente consulta, que funciona en el explorador de datos, pero obtengo el error Lo sentimos, ha ocurrido un error. al intentar usar la consulta para asignar insignias. ¿Me falta algo aquí? La consulta debería coincidir si alguien es miembro de un grupo llamado “chapter_” o “meta_chapter_” y está asignado como su grupo principal.

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 me gusta

Para los activados personalizados, necesitas añadir una línea extra al principio y al final. Hay un ejemplo en una de mis publicaciones anteriores, y puedes encontrar más información en Creating triggered custom badge queries :+1:

3 Me gusta

¡Gracias! Creo que tengo que echarle un vistazo después de una buena noche de sueño. Hace tiempo que no uso SQL y supongo que tendré que revisar más ejemplos y documentación. Lo que hay a continuación no funciona, eso seguro

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))

Desencadena este error, tal vez estoy pasando información incorrecta o el nombre/columna es incorrecto.

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

Editar: ah sí, user_id debería usarse de alguna parte, no id.


Y como resultado final, estas insignias se asignan cuando se está en un grupo cuyo nombre empieza por chapter_ o 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))

Y este para si estás en un grupo cuyo nombre termina en -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 me gusta