Quero criar um evento que será executado todos os dias e ver se uma conta expira em breve. A soon_expires
célula será posteriormente utilizada por um script Bash que envia um e-mail ao usuário relacionado informando-o da situação.
Este é o conteúdo do meu evento (usando phpmyadmin):
SELECT * FROM users;
IF DATEDIFF(expirationtime, CURDATE()) < 45 THEN
SET soon_expires = 1;
ELSE
SET soon_expires = 0;
END IF;
No entanto, ele retorna um erro, dizendo
#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
Também tentei criar um gatilho, que funcionou conforme o esperado. Mas percebi que um gatilho será executado somente quando a linha for atualizada - expirationtime
é mais ou menos estática, portanto, um gatilho não será suficiente.
Responder1
CREATE EVENT check_expire
ON SCHEDULE
EVERY 1 DAY
STARTS '2019-08-21'
DO
UPDATE users
SET soon_expires = (DATEDIFF(expirationtime, CURRENT_DATE) < 45);
ou
UPDATE users
SET soon_expires = 1
WHERE DATEDIFF(expirationtime, CURRENT_DATE) < 45;
A primeira variante atualiza todos os registros da tabela, a segunda atualiza apenas os registros que expirarão em 45 dias.