私のサイトには、2 週間以内のビデオのみを表示するビデオ ギャラリーがあります。以前は、次のように、任意のユーザーがこのページにアクセスするたびに実行される単純な更新クエリを実行していました。
$unixtime = time();
$query = mysqli_query($cxn, "UPDATE vids SET status = 'inactive' WHERE status = 'active' AND 1209600 < ($unixtime - uploadtime)");
私は最近、イベントとストアド プロシージャに気付き、特定の時間に 24 時間ごとに 1 回、このクエリをイベントとして実行するだけで多くのクエリを節約できると考えました (そして、このクエリが現在見つかっているページから上記のクエリを削除します)。phpMyAdmin v.4.1.8 (共有ホスティング) と MySQL 5.1.73 (イベント サポートは MySQL 5.1.6 以降に存在していたようです) を使用していますが、動作させることができません! これが私のクエリです(クエリは何も返さないため、これを「イベント」と見なしましたが、「手順」も何も返す必要がないことはわかっています):
CREATE DEFINER=`mysite`@`localhost`
EVENT `videodeactivate`
ON SCHEDULE EVERY 1 DAY
STARTS '2015-02-21 10:45:00'
ON COMPLETION PRESERVE ENABLE
DO
UPDATE myschema.vids SET status = 'inactive'
WHERE status = 'active'
AND 1209600 < (UNIX_TIMESTAMP() - uploadtime);
(注: 1209600 秒 = 2 週間)
イベントは確実にスケジュールされていますが、更新は行われていません (このデータベースの「テーブル」のすぐ上に小さな赤いアウトラインの時計として表示され、時計をクリックすると、手順は ENABLED とラベル付けされます)。イベントを編集して「myschema」を削除し(UPDATE vids SET ....)、AND句も削除しました。エラーはスローされていませんが、イベントは実行されていないようです。
私が知る限り、phpMyAdmin で確実に「スケジュール」されているように見えるこのイベントが実行されていないのはなぜですか? 他のすべてが失敗した場合は、これらの 2 週間以上前のビデオを非アクティブ化するクエリを手動で実行できますが、このイベントが機能することを確認したいと思います。