Привет, ребята!
Я тут пробую несколько запросов для бейджей
Некоторые работают отлично, а другие ещё в процессе настройки.
Подскажите, пожалуйста, как написать запрос, который выдаст бейдж пользователю, у которого X просмотров в темах, созданных в определённой категории? Мне удалось составить такой запрос, но он работает только для одной темы (пользователь набрал хотя бы X просмотров в одной теме в конкретной категории). Вот код:
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 views >= 10
and (:backfill OR ( p.id IN (:post_ids) ))
GROUP BY p.user_id
Но вместо одной темы я хочу выдавать бейдж тем, кто набрал, например, 500 просмотров в сумме по всем темам, созданным этим пользователем в категории Y. Кто знает, как это реализовать? 
Возможно, это решение (впереди дополнительные тесты :D)
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 (: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 просмотров. Вы потеряете свой значок.
Есть ли способ предотвратить такое?