# 多个主题的总浏览量

**URL:** https://meta.discourse.org/t/total-views-across-multiple-topics/281553
**Category:** Data & reporting
**Tags:** sql-triggered-badge
**Created:** [2021年四月18日 01:36 UTC](https://meta.discourse.org/t/total-views-across-multiple-topics/281553 "2021-04-18T01:36:19Z")
**Posts on this page:** 3
**Page:** 1

<div class="post-metadata">

### Author: ![Tiago\_Amaral](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/tiago_amaral/32/207734_2.png) [@Tiago\_Amaral](https://meta.discourse.org/u/Tiago_Amaral)
#### Post date: [2021年四月18日 01:36 UTC](https://meta.discourse.org/t/total-views-across-multiple-topics/281553/1 "2021-04-18T01:36:19Z")

</div>

大家好！

我正在尝试一些徽章查询 🙂 有些运行正常，有些我还在测试。

有人知道如何创建一个查询，为在特定类别中创建主题且累计获得 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 次的用户授予徽章。有人知道如何实现吗？😃

---

<div class="post-metadata">

### Author: ![Tiago\_Amaral](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/tiago_amaral/32/207734_2.png) [@Tiago\_Amaral](https://meta.discourse.org/u/Tiago_Amaral)
#### Post date: [2021年四月28日 12:57 UTC](https://meta.discourse.org/t/total-views-across-multiple-topics/281553/2 "2021-04-28T12:57:08Z")

</div>

这可能是一个解决方案（更多测试即将到来 :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

```

---

<div class="post-metadata">

### Author: ![Tiago\_Amaral](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/tiago_amaral/32/207734_2.png) [@Tiago\_Amaral](https://meta.discourse.org/u/Tiago_Amaral)
#### Post date: [2021年五月5日 01:00 UTC](https://meta.discourse.org/t/total-views-across-multiple-topics/281553/3 "2021-05-05T01:00:58Z")

</div>

大家好，我成功测试了上面的查询，它运行正常！现在，我想请教一下，是否有人能帮我解决另一个挑战。这是查询语句：

```
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 次浏览，你就会失去该徽章。

有什么方法可以防止这种情况发生吗？
