大家好!
我正在尝试一些徽章查询
有些运行正常,有些我还在测试。
有人知道如何创建一个查询,为在特定类别中创建主题且累计获得 X 次浏览的用户授予徽章吗?我已经构建了这个查询,但它是针对单个主题的(用户在特定类别的某个主题中至少获得了 X 次浏览)。代码如下:
SELECT p.user_id, min(p.created_at) granted_at, MIN(p.id) post_id
FROM badge_posts p
JOIN topics t ON t.id = p.topic_id
WHERE category_id = (
SELECT id FROM categories WHERE name ilike 'Technology'
) AND p.post_number = 1
AND views >= 10
and (:backfill OR ( p.id IN (:post_ids) ))
GROUP BY p.user_id
但我希望不是只针对一个主题,而是为那些在类别 Y 中创建的所有主题的总浏览量达到例如 500 次的用户授予徽章。有人知道如何实现吗?
这可能是一个解决方案(更多测试即将到来 :D)
SELECT p.user_id, min(p.created_at) as granted_at, MIN(p.id) as post_id
FROM badge_posts p
JOIN topics t ON t.id = p.topic_id
WHERE category_id = (
SELECT id FROM categories WHERE name ilike 'Technology'
) AND p.post_number = 1
and (:backfill OR ( p.id IN (:post_ids) ))
GROUP BY p.user_id
HAVING SUM (views) > XXXXXXXXXXX
大家好,我成功测试了上面的查询,它运行正常!现在,我想请教一下,是否有人能帮我解决另一个挑战。这是查询语句:
SELECT p.user_id, min(p.created_at) granted_at, MIN(p.id) post_id
FROM badge_posts p
JOIN topics t ON t.id = p.topic_id
WHERE category_id = (
SELECT id FROM categories WHERE name ilike 'Arts'
) AND p.post_number = 1
and (:backfill OR ( p.id IN (:post_ids) ))
GROUP BY p.user_id
HAVING SUM (views) >= 100
在这个示例中:在“艺术”类别创建故事且这些故事浏览量达到 100 的用户将获得徽章。问题在于:
我需要随时间推移调整此逻辑,因为浏览量要求会增加。
该徽章目前需要 100 次浏览,但六个月后可能需要 1000 次浏览。
问题在于,当我修改查询时,它会每天重新运行,导致已经获得徽章的用户失去该徽章。
这将是一场灾难。试想一下,你在平台初期仅获得 10 次浏览就赢得了“科技”类别的 2 级徽章。但几个月后平台壮大,2 级徽章的要求从 10 次浏览提高到 100 次浏览,你就会失去该徽章。
有什么方法可以防止这种情况发生吗?