2009-08-11 19 views
0

私は自分のデータベースとPHPとしてプログラミング言語としてMYSQLを使用しています。現在のシステム日付が "期限(日付)"列と一致するまで実行するcronジョブを実行したい"PROJECT"と呼ばれる私のデータベーステーブルにあります。日付が同じであれば、ステータス(プロジェクトテーブルのフィールド)を "open"から "close"に変更する更新クエリを実行する必要があります。データベースを毎日更新することができるcronjob/trigger

私は、cronジョブが最良の方法であるか、トリガーを使うことができるか、または何か他のものかもしれないかどうかはわかりません。また、私のWebサーバーとしてApacheを使用しています。

+2

参照するので、時間的トリガをサポートは、Windowsと同等に切り替えされるべきです。 –

答えて

1

OSがVistaの場合、cronjobに相当するのはスケジュールされたタスクです。 MySQLには日付変更時にトリガを実行する機能がありませんので、同じようにPHPスクリプトを実行することをお勧めします。

スケジューラ(コントロールパネル>システムとメンテナンス>管理ツール>スケジュールタスク)を開いて、新しいタスクを作成するだけです。

アクション::PHPがC:\PHP\にインストールされ、スクリプトがC:\htdocs\tasks\close_projects.phpにある場合たとえば、あなたは、次のアクションでタスクを作成する必要が

プログラム
プログラム/スクリプトを起動し
C:\PHP\php.exe
追加引数:close_projects.php
スタートで:C:\htdocs\tasks\

必要に応じて残りの設定を調整します。 (あなたの例では、毎日の仕事を使いたいと思う)。


もう1つのオプションは、その日の最初のリクエストでタスクを実行することです。その場合は、各ページの読み込み時に実行されるPHPコードを追加する必要があります。最後のリクエストの日付を格納するだけで、現在のリクエストが昨日作成された場合は、SQL文を実行します。

0
UPDATE project SET status='closed' WHERE deadline<=CURDATE(); 

このクエリを実行するスケジュールされたタスクを設定するのは簡単ではありません。

+2

スケジュールタスクが実行に失敗した場合に備えて '<= CURDATE()'を使用します。監督アンドリュー・ムーアを指摘して –

+0

おかげ - 答え、彼の場合は – gnarf

1

いくつかのホスティングでcronが不足しているため、私はかつて「遅延タスク」のクラスのセットを書いていました。私は、あなたが指定した時間に正確に実行される必要のないタスクがいくつかあることを認識しましたが、一部のクライアントがサーバを要求したときにそれらを延期することができます。

ご希望の場合はZIPです。

+0

を更新し、彼はそれが長い仕事のためにそれ以来、スケジュールされたタスクやcronジョブを使用することが常に良いでしょう。その場合にはサーバーへのアクセス権を持っている、それは要求を遅延させることはありませんタスクは実行されます。 –

関連する問題