التحقق من أهلية الشارة

أحد مستخدمينا أشار إلى أنه يشعر أنه يجب أن يحصل على شارة محددة. قمت بإلقاء نظرة على صفحة إدارة الأوسمة وشغلت استعلام “معاينة الأوسمة الممنوحة”، لكنه لم يظهر في القائمة.

هل أفضل طريقة للتحقق من الأهلية المحتملة هي استخدام أداة مثل Data Explorer للحصول على مزيد من المعلومات من قاعدة البيانات؟

في صفحة الشارة الفعلية نفسها (عبر لوحة التحكم الخاصة بك)، يمكنك معاينة نتائج الاستعلام، وهو ما أعتقد أنك فعلته.

يجب أن يؤدي تشغيل هذا الاستعلام عبر مستكشف البيانات إلى إرجاع نفس النتائج.

إذا كنت لا تزال محيرًا، أرسل لنا بريدًا إلكترونيًا وسنساعدك في البحث.

نستقبل العديد من الأسئلة حول شارة “المحب” (Aficionado) التي تمنح بعد 100 يوم متتالي. عادةً ما تكون المشكلة أن المستخدم قد فات يومًا أو أكثر بسبب اختلاف التوقيت بين منطقته الزمنية وتوقيت الخادم.

لطالما شعرت ببعض الارتباك بشأن الاستعلام المستخدم لمنح الشارة. أعتقد أنني أفهمه الآن. إليك استعلام مستكشف البيانات الذي يستخدم منطقًا مشابهًا. يعيد هذا الاستعلام فترات الزيارات المتتالية لمستخدم معين. ويعيد تاريخ البدء، وعدد الأيام المتتالية، وتاريخ الانتهاء لكل فترة من فترات الزيارات المتتالية. بشكل افتراضي، يعيد جميع الفترات التي تحتوي على 10 زيارات أو أكثر. للعثور على الأيام التي فات المستخدم زيارتها، اضبط معامل min_days على 1.

إذا كانت قيمة period_end المعادة في الصف الأول من النتائج هي التاريخ الحالي الذي يتم فيه تشغيل الاستعلام، فإن المستخدم لا يزال مؤهلاً للحصول على الشارة.

--[params]
-- string :username
-- int :min_days = 10

WITH consecutive_visits AS (
  SELECT user_id,
       visited_at,
       -- ستكون قيمة s نفسها لكل مجموعة من الأيام المتتالية
       visited_at - (DENSE_RANK() OVER (PARTITION BY user_id ORDER BY visited_at))::int s
    FROM user_visits
    WHERE user_id = (SELECT id FROM users WHERE username = :username)
)

SELECT
MIN(visited_at) period_start,
COUNT(*) AS consecutive_days,
MAX(visited_at) period_end
FROM consecutive_visits
GROUP BY user_id, s
HAVING COUNT(*) >= :min_days
ORDER BY period_start DESC

ممتاز، هذا أعطاني البصيرة التي كنت أبحث عنها :slight_smile: