-1

我正在为一个非常小的 CMS 使用 PHP 和 MySQL。

功能要求之一是系统返回续订日期前的剩余天数(例如从现在到数据库中的续订字段还剩多少天)

我打算采取的过程是每天早上@3AM,检查所有记录(通过 PHP)并更新必填字段。诀窍是,如果这个数字小于 30(天),那么发送电子邮件给 ....who ever。

这似乎非常不切实际,因为它会在一个循环中可能对数据库过于紧张。

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

然而

无论如何,我仍然必须遍历所有记录,以查看是否有 <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',)";
}

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

干杯

4

3 回答 3

0

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

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 回答