SELECT badge_posts.user_id, min(badge_posts.created_at) granted_at, MIN(badge_posts.id) AS post_id
FROM badge_posts
JOIN topics ON topics.id = badge_posts.topic_id
WHERE category_id = 17
AND badge_posts.post_number = 1
AND badge_posts.raw LIKE '%dronescene.co.uk%'
GROUP BY badge_posts.user_id
HAVING COUNT(*) > 49
ORDER BY post_id DESC
我有四种可用徽章:铜牌、银牌、金牌和白金牌,我使用类似 HAVING count(*) > 1 来表示铜牌,HAVING count(*) > 10 来表示银牌,依此类推。所有徽章都会自动颁发,没有问题。
我似乎遇到的问题是,所有徽章都是针对该类别中符合我的 WHERE 子句的第一个主题 ID 颁发的,而不是最后一个符合条件的主题 ID。
例如,我有一名会员拥有三个徽章,所有三个徽章都针对他制作的第一个符合我的 WHERE 子句的主题颁发,而不是针对符合我的 WHERE 子句的最新主题 ID。
-- [params]
-- int :user_id = 1
-- int :limit = 50
SELECT bp.user_id, bp.created_at, bp.id as post_id
FROM badge_posts bp
JOIN topics t ON t.id = bp.topic_id
WHERE bp.user_id = :user_id
AND t.category_id = 17
AND bp.post_number = 1
AND bp.raw LIKE '%dronescene.co.uk%'
ORDER BY bp.created_at ASC
LIMIT :limit