شارة للمنشورات التي تم إنشاؤها بين الساعة 1 صباحًا و 5 صباحًا

أخشى أنني أصبحت مدمنًا على هذه الشارات :smiling_face_with_three_hearts:
ستُمنح هذه الشارة تحديدًا للمستخدمين الذين نشروا منشوراتًا بين الساعة 1 صباحًا و5 صباحًا، ويتم تحديثها يوميًا.
ولكن للأسف، لا أعرف كيفية تحديد هذا النطاق الزمني. أي مساعدة ستكون موضع تقدير.

SELECT user_id, current_timestamp granted_at 
FROM badge_posts p  
WHERE p.created_at > CURRENT_DATE /* كيف يمكن تحديد النطاق بين '1 صباحًا' و'5 صباحًا'؟ */ 
GROUP BY user_id 
HAVING count(*) >= 100

يمكنك التصفية على النحو التالي:

SELECT 
    user_id, 
    current_timestamp granted_at 
FROM badge_posts p  
WHERE p.created_at::time BETWEEN '01:00' AND '05:00'
GROUP BY user_id 
HAVING count(*) >= 100

آمل أن يكون ذلك مفيدًا.

شكرًا جزيلاً لمساعدتك. جربت مثالك، لكن لم يتم منح أي شارة في المعاينة. الآن الساعة 11:17 صباحًا هنا، وقمت بتغيير الوقت في مثالك بين 10:00 و13:00، وأنشأت موضوعًا تجريبيًا وردًا، لكن لا يظهر أي شيء. جربت أيضًا:

SELECT 
    user_id, 
    current_timestamp granted_at 
FROM badge_posts p  
WHERE p.created_at:: time >= '10:00:00' or p.created_at:: time < '13:00:00' 
GROUP BY user_id 
HAVING count(*) >= 100

ولا يزال لا يظهر أي شيء :thinking:

تسجّل قاعدة البيانات الطابع الزمني بتوقيت غرينتش (GMT+0)، لذا يجب عليك إضافة فرق التوقيت هذا إلى منطقتك الزمنية. إذا أخبرتني بمنطقتك الزمنية، يمكنني تعديلها لك.

عظيم. إنها بروكسل/أوروبا، توقيت غرينتش +01:00.

لا تتلقى الشارة لأنك أضفت قيد HAVING count(*) >= 100، وبالتالي لن تتمكن من كسب الشارة إلا إذا نشرت أكثر من 100 منشور خلال تلك الفترة الزمنية.

SELECT 
    user_id, 
    current_timestamp granted_at 
FROM badge_posts p  
WHERE p.created_at::time BETWEEN '02:00' AND '06:00'
GROUP BY user_id 
HAVING count(*) >= 100

بالمناسبة، تصميم الشارة جميل: هل هو SVG مُصمَّم بـ CSS أم رسمة تعتمد على البكسل؟

يا إلهي، أنت محق، لقد نسيت ذلك. إنه يعمل. إذا لم أطلب الكثير، هل من الممكن أن يكون فحص الوقت بناءً على الوقت الذي اختاره المستخدم في ملفه الشخصي؟ بخلاف ذلك، سيكون المنتدى مليئًا بشارات “المراقبين” :grinning_face_with_smiling_eyes: (لأولئك الذين يعيشون خارج أوروبا وما إلى ذلك). شكرًا جزيلاً!

تم إنشاؤه في Photoshop وFigma، وليس بتنسيق CSS. سأشارك الرابط في هذا المنتدى قريبًا بمجرد الانتهاء من التصميم وجميع الشارات.

مع مراعاة المنطقة الزمنية للمستخدم، سيبدو الاستعلام كالتالي:

WITH users_timezone AS (
    SELECT 
        user_id, 
        CASE WHEN utc_offset IS NULL THEN '00:00:00' 
             ELSE utc_offset END
    FROM user_options uo
    LEFT JOIN pg_timezone_names pt ON uo.timezone = pt.name
)

SELECT 
    p.user_id,
    current_timestamp granted_at
FROM badge_posts p  
INNER JOIN users_timezone ut ON ut.user_id = p.user_id
WHERE (p.created_at+ut.utc_offset)::time BETWEEN '01:00' AND '05:00'
GROUP BY p.user_id 
HAVING count(*) >= 100

شكرًا جزيلاً لك! :blush: