计算MySQL数据库中今天日期和日期之间的剩余时间

时间:2013-01-30 16:47:05

标签: php mysql automation sql-update

我正在将PHP和MySQL用于非常小的CMS。

其中一项功能要求是系统返回续订日期之前剩余的天数(例如,现在与数据库中的续订字段之间剩余的天数)

我要采取的过程是每天早上@ 3AM,查看所有记录(通过PHP)并更新必填字段。诀窍在于,如果这个数字<30(天),则发送电子邮件给......谁曾经。

这似乎非常不切实际,因为它可能会在数据库中的循环中过于激烈。

如果我可以让数据库进行此计算,那将更好(不确定如何)。

无论其

我仍然需要遍历所有记录,以查看续订前是否还有<30天(发送电子邮件)。

如果有人有更好的建议,我将非常感激。下面是我想做的一些presudo代码

$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',)";
}

显然只是在这里传递这个想法,但任何其他解决方案都非常受欢迎。

干杯

3 个答案:

答案 0 :(得分:0)

您可以使用TIMESTAMPDIFF()函数在MySQL中执行此操作,例如

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

这将为您提供剩余的天数,插入变量$ days。然后

if(($days > 0) && ($days <30)) {
    // do something
}

答案 1 :(得分:0)

在您的查询中执行此操作。这更容易:

$q = "SELECT * 
      FROM testDB 
      WHERE renewal_Date < CURRENT_TIMESTAMP - INTERVAL 30 DAY";

答案 2 :(得分:0)

的stripslashes?你真的真的需要升级你的php版本。 magic_quotes现在默认已经被禁用了很长时间,并且启用它是服务器配置错误和/或PHP安装严重过时的迹象。

话虽如此,你的查询不会“重”或“坏”,除非你处理数十亿行......

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

应获取续订日期在过去30天内的所有记录。