Как я могу отфильтровать конкретную бейдж? Мне нужно подсчитать, сколько раз его получили.
Например, бейдж «howto writer» — мне нужно узнать, кто написал больше всего howto-статей, и составить рейтинг.
Есть какие-нибудь подсказки по этому поводу? Я попытался добавить строку
AND b.id = 136
Но это не сработало
Вот слегка изменённая версия этого запроса, добавляющая фильтр badge name. По умолчанию badge name равен 'all badges'. При таком значении будут возвращены результаты для всех бейджей. Если вы установите badge name в имя конкретного бейджа, будут возвращены только результаты для этого бейджа.
-- [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
Всё, спасибо большое ![]()