Conteggi badge utente con filtro nome badge

Come posso filtrare un badge specifico? Ho bisogno di contare quante volte è stato ottenuto.
Ad esempio, per il badge “howto writer”, devo sapere chi ha scritto più howto e creare una classifica.

1 Mi Piace

Hai qualche suggerimento a riguardo? Ho provato ad aggiungere una riga
AND b.id = 136

Ma non funziona.

1 Mi Piace

Ecco una versione leggermente modificata di quella query che aggiunge un filtro badge name. Il valore predefinito di badge name è 'tutti i badge'. Quando impostato su questo valore, verranno restituiti i risultati per tutti i badge. Se imposti badge name sul nome di un badge specifico, verranno restituiti solo i risultati per quel badge.

-- [params]
-- int :posts = 1
-- int :top = 10
-- string :badge_name = tutti i badge

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 'tutti i badge' = :badge_name
            THEN true
        ELSE b.name = :badge_name
    END
GROUP BY u.username
ORDER BY badge_count DESC
4 Mi Piace

È tutto :slight_smile: grazie mille

1 Mi Piace