لم أجرب إعدادها كشارة sql، ولكن إليك استعلام مستكشف البيانات للحصول على أيام المشرف كدور له:
WITH moderator_role_dates AS (
SELECT
gu.user_id,
MIN(gu.created_at) AS role_granted_date
FROM
group_users gu
JOIN groups g ON gu.group_id = g.id
WHERE
g.name = 'moderators'
GROUP BY
gu.user_id
),
current_date_info AS (
SELECT
CURRENT_DATE AS today
)
SELECT
mrd.user_id,
u.username,
mrd.role_granted_date,
cdi.today,
(cdi.today - mrd.role_granted_date) AS days_in_role
FROM
moderator_role_dates mrd
JOIN users u ON mrd.user_id = u.id,
current_date_info cdi
ORDER BY
days_in_role DESC
لقد قمت للتو بوضع علامة على هذا كـ #sql-triggered-badge، ولكن فكرت في التحقق مما إذا كنت تبحث عن علامة تلقائية أم لا؟ أفترض أنه قد لا يكون لديك عدد كبير من المشرفين ويمكنك ربما منح هذه العلامة يدويًا بناءً على استعلام مستكشف البيانات؟
أعتقد أن نسخة مبسطة من النسخة أعلاه يمكن أن تكون:
-- [params]
-- int :years
WITH time_in_mod_group AS (
SELECT
user_id,
(CURRENT_DATE - created_at::date) AS days_as_mod
FROM group_users
WHERE group_id = 2 -- group id of the 'moderator' group
AND user_id > 0 -- exclude system users and bots
)
SELECT
user_id,
days_as_mod
FROM time_in_mod_group
WHERE days_as_mod > (365 * :years)
هذا سيعمل كاستعلام مستكشف بيانات بدلاً من مجموعة من العلامات SQL، ويمكنه تحديد قائمة بالمستخدمين الذين يستوفون المعايير حتى تتمكن من منحهم العلامة يدويًا.
هناك تحذير واحد وهو أنه إذا غادروا مجموعة المشرفين في أي وقت وأعادوا الانضمام، فسيتم احتساب أحدث إدراج فقط. أعتقد أنه سيكون من الممكن استخدام جدول user_histories لتجاوز ذلك، ولكن إذا كان استثناءً، فمن المحتمل أن يكون من الأسهل التعامل معه يدويًا أيضًا.
نعم، من المفترض أن يكون تلقائيًا. في الأساس، نريد فقط تعيين شارات متعددة للمشرفين (سنة واحدة، سنتان، 3 سنوات، إلخ) بناءً على المدة التي قضوها كمشرف ومنحهم الشارات تلقائيًا.