Abzeichen für Beiträge, die zwischen 1 und 5 Uhr morgens erstellt wurden

Ich fürchte, ich bin süchtig nach diesen Abzeichen geworden :smiling_face_with_three_hearts:
Dieses wird Benutzern verliehen, die Beiträge zwischen 01:00 und 05:00 Uhr erstellt haben, und wird täglich aktualisiert.
Leider habe ich jedoch keine Ahnung, wie man dieses Zeitintervall auswählt. Jede Hilfe wird geschätzt.

SELECT user_id, current_timestamp granted_at 
FROM badge_posts p  
WHERE p.created_at > CURRENT_DATE /* Wie zwischen '01:00' und '05:00'? */ 
GROUP BY user_id 
HAVING count(*) >= 100

3 „Gefällt mir“

Es ist möglich, wie folgt zu filtern:

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

Ich hoffe, das hilft dir.

2 „Gefällt mir“

Vielen Dank für deine Hilfe. Ich habe dein Beispiel ausprobiert, aber im Vorschau-Modus wird kein Abzeichen vergeben. Es ist hier 11:17 Uhr, und ich habe die Zeit in deinem Beispiel zwischen 10:00 und 13:00 Uhr geändert, ein Demo-Thema erstellt und darauf geantwortet, aber es erscheint nichts. Ich habe auch Folgendes versucht:

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

Und trotzdem erscheint nichts :thinking:

1 „Gefällt mir“

Die Datenbank speichert den Zeitstempel in GMT+0, sodass du diese Zeitdifferenz zu deiner Zeitzone addieren musst. Wenn du mir deine Zeitzone nennst, kann ich sie für dich anpassen.

3 „Gefällt mir“

Perfekt. Es ist Europa/Brüssel, GMT +01:00.

3 „Gefällt mir“

Sie erhalten das Abzeichen nicht, da Sie die Bedingung HAVING count(*) >= 100 hinzugefügt haben. Sie können das Abzeichen daher nur erhalten, wenn Sie in diesem Zeitintervall mehr als 100 Beiträge veröffentlichen.

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
3 „Gefällt mir“

Übrigens, cooles Badge-Design: Ist es ein CSS-gestyltes SVG oder eine pixelbasierte Grafik?

3 „Gefällt mir“

OMG, du hast recht, ich habe das vergessen. Es funktioniert. Wenn ich nicht zu viel verlange, ist es möglich, diese Zeitprüfung auf Basis der vom Benutzer in seinem Profil eingestellten Zeit durchzuführen? Andernfalls wird das Forum voller “Watchmen”-Abzeichen sein :smile: (für Leute, die außerhalb Europas leben, etc.). Vielen Dank!

Erstellt in Photoshop und Figma, nicht mit CSS gestylt. Ich werde die URL bald in diesem Forum posten, sobald ich das Design und alle Abzeichen fertiggestellt habe.

3 „Gefällt mir“

Unter Berücksichtigung der Zeitzone des Benutzers sieht die Abfrage wie folgt aus:

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
5 „Gefällt mir“

Vielen Dank! :blush:

1 „Gefällt mir“