DATEDIFF() verweigert die Ausführung bei einem MySQL-Ereignis

DATEDIFF() verweigert die Ausführung bei einem MySQL-Ereignis

Ich möchte ein Ereignis erstellen, das jeden Tag ausgeführt wird und erkennt, ob ein Konto bald abläuft. Die soon_expiresZelle wird später von einem Bash-Skript verwendet, das dem entsprechenden Benutzer eine E-Mail sendet, um ihn über die Situation zu informieren.

Dies ist der Inhalt meiner Veranstaltung (mit phpmyadmin):

SELECT * FROM users;

IF DATEDIFF(expirationtime, CURDATE()) < 45 THEN
    SET soon_expires = 1; 
ELSE 
    SET soon_expires = 0; 
END IF;

Es wird jedoch ein Fehler zurückgegeben, der besagt:

#1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF DATEDIFF(expirationtime, CURDATE()) < 45 THEN SET soon_expires = 1; EL' at line 3

Ich habe auch versucht, einen Trigger zu erstellen, der wie vorgesehen funktionierte. Mir wurde jedoch klar, dass ein Trigger nur ausgeführt wird, wenn die Zeile aktualisiert wird – er expirationtimeist mehr oder weniger statisch, sodass ein Trigger nicht ausreicht.

Antwort1

CREATE EVENT check_expire
ON SCHEDULE
EVERY 1 DAY
STARTS '2019-08-21'
DO
UPDATE users
SET soon_expires = (DATEDIFF(expirationtime, CURRENT_DATE) < 45);

oder

UPDATE users
SET soon_expires = 1
WHERE DATEDIFF(expirationtime, CURRENT_DATE) < 45;

Die erste Variante aktualisiert alle Datensätze in der Tabelle, die zweite aktualisiert nur die Datensätze, die innerhalb von 45 Tagen ablaufen.

verwandte Informationen