Benutzer-Abzeichenanzahl mit Abzeichennamen-Filter

Wie kann ich ein bestimmtes Abzeichen filtern? Ich muss zählen, wie oft es erreicht wurde.
Beispiel: „Howto Writer Badge“ – ich möchte wissen, wer die meisten Howtos geschrieben hat, und eine Rangliste erstellen.

1 „Gefällt mir“

Irgendwelche Hinweise dazu? Ich habe versucht, eine Zeile hinzuzufügen:

AND b.id = 136

Aber es funktioniert nicht.

1 „Gefällt mir“

Hier ist eine leicht modifizierte Version dieser Abfrage, die einen Filter für badge name hinzufügt. Der badge name hat standardmäßig den Wert 'all badges''. Wenn dieser Wert gesetzt ist, werden Ergebnisse für alle Badges zurückgegeben. Wenn Sie den badge name` auf den Namen eines bestimmten Badges setzen, werden nur Ergebnisse für diesen Badge zurückgegeben.

-- [params]
-- int :posts = 1
-- int :top = 10
-- string :badge_name = all badges

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 'all badges' = :badge_name
            THEN true
        ELSE b.name = :badge_name
    END
GROUP BY u.username
ORDER BY badge_count DESC
4 „Gefällt mir“

Das ist es :slight_smile: vielen Dank

1 „Gefällt mir“