2011-05-15 6 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

어떤 데이터베이스 시스템입니까? 중요하기 때문에 지정하십시오. –

+0

좀 더 구체적으로 기재 할 수 있습니까? 작동하지 않는 것은 무엇입니까? "합계"의 가치는 무엇입니까? – Malvolio

+0

그것은 MYSQL 데이터베이스, 값이 잘못되었습니다. $ gtime은> 30으로 계산되고 데이터베이스는 'N'으로 활성화 된 테이블 필드 설정으로 업데이트됩니다. –

답변

0

왜 하나 개의 문장 :이 같은 일의 차이를 지정, 예를 들어 SQL Server의

?

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

그래서?

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

원하는 차이점을 지정해야합니다.

DATEDIFF(day, date, curdate()) 
0

다음 작업은 사용자가 원하는 작업에 따라 다르지만 도움이 될 수 있습니다.

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

편집 : 특정 회원을 대상으로 할 경우

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

, 단순히 제약 조건을 추가 :이 쿼리는 모든 회원에 지정된 ID로 식별뿐만 아니라 멤버를 작동합니다 NOW()는 MySQL 함수입니다. 차이점 엔진에서 다를 수 있습니다