Ich möchte ein Ereignis erstellen, das jeden Tag ausgeführt wird und erkennt, ob ein Konto bald abläuft. Die soon_expires
Zelle 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 expirationtime
ist 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.