我正在将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',)";
}
显然只是在这里传递这个想法,但任何其他解决方案都非常受欢迎。
干杯
答案 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天内的所有记录。