sql datediff问题

时间:2011-05-15 19:10:56

标签: sql datediff

我正在尝试计算2个日期,当前日期和我的成员在网站上订阅的日期之间的差异。如果差异超过30天,我会关闭他们的订阅。我无法让它发挥作用。

$strFind="SELECT DATEDIFF(date, curdate()) AS total FROM `monthlydues` WHERE     `memid`=\"$curmemid\" ORDER BY `id` DESC LIMIT 1";
$result=mysql_query($strFind) or die(mysql_error());
$row=mysql_fetch_array($result);
$gtime=$row['total'];

if($gtime>30){  
$strsql="UPDATE monthlydues SET `active`='N' WHERE `memid`=\"$curmemid\"";
mysql_query($strsql,$connect) or die(mysql_error());
$chkrow5=mysql_affected_rows($connect);
}

3 个答案:

答案 0 :(得分:0)

你必须指明你想要的差异。

例如,对于SQL Server,您可以指定以天为单位的差异:

DATEDIFF(day, date, curdate())

答案 1 :(得分:0)

为什么不发表一个声明?

UPDATE monthlydues
SET `active`='N'
WHERE DATEDIFF(curdate(), date) > 30

那么这个?

$strsql="UPDATE monthlydues SET `active`='N' WHERE DATEDIFF(curdate(), `date`) > 30";

答案 2 :(得分:0)

以下内容可能会对您有所帮助,但这取决于您想要做什么;此查询将对所有成员进行操作,而不仅仅是由指定ID标识的成员:

UPDATE monthlydues SET active = 'N' 
WHERE DATEDIFF(NOW(), `date`) > 30;

如果您希望定位特定成员,只需添加约束:

UPDATE monthlydues SET active = 'N'
WHERE memid = :memberid 
AND DATEDIFF(NOW(), `date`) > 30;

编辑: NOW()是一个MySQL函数。差异引擎可能会有所不同