Conteo de insignias de usuario con filtro de nombre

¿Cómo puedo filtrar un insignia específica? Necesito contar cuántas veces la han obtenido.
Por ejemplo, “la insignia de escritor de cómo hacer”: necesito saber quién escribió más artículos de “cómo hacer” y crear un ranking.

1 me gusta

¿Alguna pista sobre esto? Intenté agregar una línea
AND b.id = 136

Pero no funciona

1 me gusta

Aquí tienes una versión ligeramente modificada de esa consulta que añade un filtro de nombre de insignia. El nombre de insignia tiene como valor predeterminado 'todas las insignias'. Cuando se establece en ese valor, se devolverán resultados para todas las insignias. Si estableces el nombre de insignia en el nombre de una insignia específica, solo se devolverán los resultados para esa insignia.

-- [params]
-- int :posts = 1
-- int :top = 10
-- string :badge_name = todas las insignias

SELECT
username,
COUNT(ub.id) as badge_count
FROM user_badges ub
JOIN users u ON u.id = ub.user_id
JOIN user_stats us
ON us.user_id = ub.user_id
JOIN badges b ON b.id = ub.badge_id
WHERE us.post_count > :posts
AND (u.admin = 'f' AND u.moderator = 'f')
AND CASE
        WHEN 'todas las insignias' = :badge_name
            THEN true
        ELSE b.name = :badge_name
    END
GROUP BY u.username
ORDER BY badge_count DESC
4 Me gusta

¡Eso es todo :slight_smile: Muchas gracias!

1 me gusta