-1

非常に小さな CMS に PHP と MySQL を使用しています。

機能要件の 1 つは、システムが更新日までの残り日数を返すことです (たとえば、現在からデータベースの更新フィールドまでの残り日数)。

私が取ろうとしていたプロセスは、毎朝午前 3 時で、(PHP を介して) すべてのレコードを調べ、必要なフィールドを更新しました。秘訣は、この数値が 30 (日) 未満の場合は、誰にでも電子メールを送信することです。

これは非常に現実的ではないように思われます。また、ループになるため、データベースへの負荷が強すぎる可能性があります。

データベースにこの計算をさせることができれば、それはより良いでしょう(方法はわかりません)。

でも

いずれにせよ、すべてのレコードをループして、更新 (電子メールの送信) までに 30 日未満かどうかを確認する必要があります。

誰かがより良い提案があれば、私はとても感謝しています. 以下は、私がやりたいいくつかの前提コードです

$q = "SELECT * FROM testDB ";
$r = mysql_query($q);

while ( $a = mysql_fetch_assoc($r) ) {

$rnlDate= stripslashes($a['renewal_Date']); //get Date inserted in table

$thisId= stripslashes($a['id']); // current record id

$timeLeft=$rnlDate-date(); // get time left

if($timeLeft <=30)
{
$makeEmail= createEmail(field_ID); // not sure how to wait until this function completes
}

doUpdate($timeLeft);


function doUpdate($timeLeft)
{
"UPDATE INTO testDB WHERE 'id' =$thisId; VALUES('','$timeLeft',)";
}

明らかにここでアイデアを渡すだけですが、他の解決策は大歓迎です。

乾杯

4

3 に答える 3

0

これは、MySQLでTIMESTAMPDIFF()関数を使用して行うことができます。

SELECT TIMESTAMPDIFF(DAY,NOW(),column_name) AS diff
FROM table
WHERE id = 'whatever';

これにより、残りの日数がわかり、変数$daysにプラグインします。それで

if(($days > 0) && ($days <30)) {
    // do something
}
于 2013-01-30T16:49:15.540 に答える
0

クエリでこれを行います。それははるかに簡単です:

$q = "SELECT * 
      FROM testDB 
      WHERE renewal_Date < CURRENT_TIMESTAMP - INTERVAL 30 DAY";
于 2013-01-30T16:49:28.313 に答える
0

ストリップスラッシュ? PHPのバージョンをアップグレードする必要があります。magic_quotes は長い間デフォルトで無効化されており、有効になっている場合は、サーバーの構成が不適切であるか、PHP のインストールが大幅に古くなっていることを示しています。

そうは言っても、何十億もの行を扱っていない限り、クエリは「重い」または「悪い」ことはありません...

SELECT ...
FROM ...
WHERE renewal_date  > (CURDATE() - INTERVAL 30 DAY) AND (renewal_date < CURDATE() )

更新日が過去 30 日以内のすべてのレコードを取得する必要があります。

于 2013-01-30T16:51:06.117 に答える