Ich fürchte, ich bin süchtig nach diesen Abzeichen geworden
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
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
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
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.
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
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 (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.
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