Привет! Я хотел бы узнать, есть ли какой-либо шаблон или стандартный запрос для выдачи бейджей за определённое количество принятых решений? Например, я отвечаю примерно на 10 постов/вопросов, и все они помечаются как решения. За это я получаю бейдж, а также соответствующие бейджи за 20, 30, 40 и более отмеченных решений и так далее.
Я пытался поискать стандартные запросы, но, похоже, их нет. Однако я вижу, что здесь есть некоторые пользовательские запросы.
С этим плагином поставляется несколько бейджей, которые можно активировать на странице /admin/badges (HelpDesk и TechSupport). Однако вот запросы, если вы захотите их адаптировать:
SELECT p.user_id, p.id post_id, p.updated_at granted_at
FROM badge_posts p
WHERE p.post_number > 1 AND
p.id IN (
SELECT post_id FROM (
SELECT pc.post_id, row_number()
OVER (PARTITION BY p1.user_id ORDER BY pc.created_at) as rnum
FROM post_custom_fields pc
JOIN badge_posts p1 ON p1.id = pc.post_id
JOIN topics t1 ON p1.topic_id = t1.id
WHERE name = 'is_accepted_answer' AND
p1.user_id <> t1.user_id AND
(
:backfill OR
p1.user_id IN (
select user_id from posts where p1.id IN (:post_ids)
)
)
) X WHERE rnum = 1)
SELECT id user_id, current_timestamp granted_at
FROM users
WHERE id IN (
SELECT p1.user_id
FROM post_custom_fields pc
JOIN badge_posts p1 ON p1.id = pc.post_id
JOIN topics t1 ON p1.topic_id = t1.id
WHERE p1.user_id <> t1.user_id AND
name = 'is_accepted_answer' AND
p1.user_id IN (
SELECT user_id
FROM posts
WHERE :backfill OR p1.id IN (:post_ids)
)
GROUP BY p1.user_id
HAVING COUNT(*) > 9
)
Хотя, я думаю, что второй запрос выше содержит всю необходимую информацию. Решения хранятся в таблице post_custom_field как is_accepted_answer в столбце name. А второй запрос выдаёт бейдж TechSupport за 10 решений (HAVING COUNT(*) > 9), поэтому для тех, что вы хотите от ОП, вам нужно просто скопировать этот запрос и изменить нижнее число на 19, 29, 39 и так далее.