شارة بناءً على متى تمت ترقية المستخدم لأول مرة كمشرف؟

مرحباً يا رفاق! لقد حاولت البحث، لكن لم أجد شيئاً.

هل هناك أي طريقة لتعيين شارة بناءً على مدة بقاء المستخدم مشرفاً؟

في حالتنا، لدينا مشرفون كانوا جزءاً أساسياً من الفريق لسنوات عديدة ونريد منحهم شارة خاصة.

بشكل أساسي، يجب أن يتحقق الاستعلام من الشروط:
هل المستخدم مشرف حالياً؟
كم يوماً احتفظ المستخدم بدور المشرف؟

بهذه الطريقة، نريد منح شارات للمشرفين الذين كانوا نشطين لمدة سنة، 3 سنوات، 5 سنوات، إلخ.

لم أجرب إعدادها كشارة 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
3 إعجابات

لقد قمت للتو بوضع علامة على هذا كـ #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 لتجاوز ذلك، ولكن إذا كان استثناءً، فمن المحتمل أن يكون من الأسهل التعامل معه يدويًا أيضًا.

إعجابَين (2)

نعم، من المفترض أن يكون تلقائيًا. في الأساس، نريد فقط تعيين شارات متعددة للمشرفين (سنة واحدة، سنتان، 3 سنوات، إلخ) بناءً على المدة التي قضوها كمشرف ومنحهم الشارات تلقائيًا.

إعجاب واحد (1)

أعتقد أن ما ورد أعلاه قابل للتكيف إذا قمت بإزالة المعلمة وتغيير WHERE لتكون عتبات الأيام المختلفة لكل منها، على سبيل المثال.

WHERE days_as_mod > 365

(سيكون المشغل update daily)

شكرًا، من الناحية الفنية يمكننا القيام بذلك، ولكن طالما يمكننا القيام بذلك تلقائيًا بطريقة لا تضر بالأمان، فسنفضل ذلك. :slight_smile:

أنا أقدر الكود حقًا وسنحاول تنفيذه مع مزود الاستضافة لدينا CommuniteQ ونعود إليكم هنا.

إعجاب واحد (1)