sql дата-проблема - PullRequest
       5

sql дата-проблема

0 голосов
/ 15 мая 2011

Я пытаюсь подсчитать разницу между 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 голосов
/ 15 мая 2011

Почему не одно утверждение?

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

Так вот это?

$strsql="UPDATE monthlydues SET `active`='N' WHERE DATEDIFF(curdate(), `date`) > 30";
0 голосов
/ 15 мая 2011

Следующее может помочь вам, хотя это зависит от того, что именно вы хотите сделать; Этот запрос будет работать для всех участников, а не только для члена, указанного с помощью указанного идентификатора:

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

Если вы хотите настроить таргетинг на конкретного члена, просто добавьте ограничение:

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

РЕДАКТИРОВАТЬ: СЕЙЧАС () является функцией MySQL. Вероятно, будет отличаться на разных двигателях

0 голосов
/ 15 мая 2011

Вы должны указать, какую разницу вы хотите.

Например, для SQL Server вы указываете разницу в днях, например:

DATEDIFF(day, date, curdate())
...