DATEDIFF() は MySQL イベントでは実行されません

DATEDIFF() は MySQL イベントでは実行されません

毎日実行され、アカウントの有効期限が近づいているかどうかを確認するイベントを作成したいと思います。このsoon_expiresセルは、後で Bash スクリプトによって使用され、関連するユーザーに状況を通知する電子メールが送信されます。

これは私のイベントの内容です(phpmyadmin を使用):

SELECT * FROM users;

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

しかし、次のようなエラーが返されます。

#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

トリガーも作成してみましたが、意図したとおりに動作しました。しかし、トリガーは行が更新されたときにのみ実行され、expirationtime多かれ少なかれ静的であるため、トリガーだけでは不十分であることに気付きました。

答え1

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

または

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

最初のバリアントはテーブル内のすべてのレコードを更新し、2 番目のバリアントは 45 日以内に期限が切れるレコードのみを更新します。

関連情報