2013-06-28 11 views
7

私は、次の7日以内に期限切れとなるドメインをチェックし、顧客に送信して電子メールを送る自動チェッカーを持っています。このSQLクエリを使用してPHPのデータベースから行を選択する方法日付フィールドが将来7日ある

イム:

$sql="SELECT * from domain_names where (status = '' or status = 'valid') and date(expiry_date) = date(now() + interval 7 day) "; 

それが正常に動作しますが、それは実行を停止し、それはそれは逃したドメインを行う習慣を過ぎ日が進みます。それはドメインもそれを見逃しているようにするための最良の方法は何ですか?

たとえば、ドメインが7日で期限切れになり、1日目にドメインが実行された場合、そのドメインが表示され、顧客に電子メールが送信され、行にフラグが立てられ、電子メールはすでに送信されていますが、 1日目と2日目に再度実行を開始します。そのドメイン(行)は表示されません。

+1

良いアイデア、その旗人、だから正確に質問ですか? – fvu

+0

それはうまく動作しますが、実行を停止して1日が過ぎたら、それは逃したドメインを実行しません。それはドメインもそれを見逃しているようにするための最良の方法は何ですか? –

+0

MySQLイベントを使用して、スケジュールに従って毎日実行させます。 –

答えて

0

正確に7日前にチェックしています。あなたは7日先まで確認したいと思う。コードを次のように変更してください:

この期間内に既に電子メールで送信されたフラグは、再度電子メールで送信されることはありません。

+0

データベースのすべての行を処理していますか? –

0

日付がどこよりも小さいか(今日+ 7日)を確認したいと思います。

また、テーブルに「フラグ」(reminderSentなど)を用意する必要があります。クエリ/スクリプトを実行するたびに複数のリマインダを送信しないようにしてください。

$sql = "SELECT * from domain_names WHERE 
    (status = '' or status = 'valid') AND 
    date(expiry_date) <= date(now() + interval 7 day) AND 
    AND !reminderSent"; 
0

電子メールが送信されたかどうかを示すフラグがあるので、次の7日間で期限切れになるすべてのドメインのフラグステータスを確認してください。

あなたのクエリは、現在から1週間に満了するドメインのみを返します。 ドメインを7日以内に期限切れに戻すように変更します。

0

基本的には、7日以内のORに不完全なフラグがある場合、メールを送信する必要があります。

それは本当に唯一あなたが1にステータスフィールドを更新提供し、二つの値sentnot sentこの場合、すなわち1または0

SELECT 
    * 
FROM 
    domain_names 
WHERE 
    status = 0 
OR 
    expiry_date BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 7 DAY) 

を持っているとして、私はしかし、整数に文字列から列を変更しますスクリプトが失敗したときにいつでも次回送信することができます。

$sql="SELECT * from domain_names where (status = '' or status = 'valid') and date(expiry_date) between date(now()) and date(now() + interval 7 day)"; 
0

たぶん、あなたは、のようないくつかの日付の間隔が必要です。これは2倍です。処理済みのフラグが表示されますが、通知が送信されたときの履歴参照も表示されます。

クエリで、processed_dateがnullで、expiry_dateが今日と7日以下の条件を追加します。

(pseudo) where ... and processed_date is null and expiry_date <= today + 7 

あなたのWebホストはそれを提供する場合、サーバ側でCRONイベントを設定逃した

0

レコードに処理された日付を追加:

0
This should give the result as you need: 

DATE_SUB(CURDATE(),INTERVAL 7 DAY) = expiry_date; 
You can refer to the link below for more details: 

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html 
0

後、レコードを探しています。その後、停電やインターネットの停止について心配することなく、頻繁に実行することができます。

0

このクエリで試してください。それは "どこ(ステータス= '' やステータス= '' 有効)とDATE_ADD(EXPIRY_DATE、INTERVAL DAY 7)domain_names SELECT * FROM"

$ sqlを= ..あなたのためにフルに使用します。

0

また、現在の日付と7日間の代わりに変数を使用してPHPで設定することもできます。

$nextWeek=date("Ymd")+7; 
$sql="SELECT * from domain_names where (status = '' or status = 'valid') 
and date(expiry_date) <= $nextWeek) "; 

どんな日付形式使用、私はこれが20140628に変換でしょう書き込むよう20140621である、異なる場合"Ymd"を交換する必要があります。

下ケースmdは2桁の月と日"06"または"01"を可能に下部ケース。 私は一桁に変更すると信じ大文字.... 2014621 、あなたが順序を変更し、同様に"/""-"を置くことができます。

日付(「MDY」)+7 = 6-28- 2014

日付( "D/M/Y")+ 7 = 28/6/2014

1

あなたのコードでただ修飾( '<' を置く):

0

このコードを使用できます。

$sql = SELECT * from domain_names where (status = '' or status = 'valid') and date(expiry_date) = DATE_ADD(date(now()), INTERVAL 7 DAY); 

それはあなたがその最後の日から、それぞれを確認することができるように

0

あなたはヨーヨーが最後あなたの有効期限レコードをチェックされたときのログを追加すると考えられ、その後、あなたの変数としてその日付を使用している...あなたを助けるかもしれませんあなたのコードが実行される時間?

関連する問題