2011-05-15 85 views
0

我試圖計算兩個日期,當前日期和我的會員在網站上訂閱的日期之間的差異。如果差異超過30天,我會關閉他們的訂閱。我只是無法讓它工作。sql datediff問題

$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); 
} 
+0

這是哪個數據庫系統。請註明,因爲它很重要,很多。 – 2011-05-15 19:12:23

+0

你能更具體嗎?什麼不行?發現「總計」的價值是多少? – Malvolio 2011-05-15 19:14:02

+0

這是一個MYSQL數據庫,值是錯誤的。 $ gtime計算爲> 30,數據庫更新設置表字段激活爲'N' – 2011-05-15 19:15:28

回答

0

爲什麼不一個說法?

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

那麼這個?

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

你必須指定你想要什麼樣的差異。

對於SQL Server,例如,你指定這樣的天差:

DATEDIFF(day, date, curdate()) 
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函數。在diff引擎上很可能會有所不同