SQL SELECT日期从10天前失败

时间:2011-11-20 14:08:07

标签: php mysql date

我对SQL有些麻烦:

首先,我使用PHP-time():

插入当前日期
mysql_query("
   INSERT INTO applicants (
      date_last_applied
   )
   VALUES (
      " . time() . "
   )
");

这很好用。但是,我只想在10天前插入^时执行一个动作:

$result = mysql_query("
   SELECT * FROM applicants WHERE date_last_applied < DATE_SUB(NOW(), INTERVAL 10 DAY)
");
while ($row = mysql_fetch_array($result)) 
    echo $row['id_member'];

虽然它应该工作(IMO),但事实并非如此。 d:

对于可能的解决方案:它不是使用其他时间格式的选项,因为我在整个网站上使用此格式。

4 个答案:

答案 0 :(得分:3)

我认为将date_sub结果转换为unix时间将解决您的问题。

date_last_applied < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 10 DAY))

答案 1 :(得分:1)

在插入行时,您正在使用本地计算机的时间(time())。但是在检索行时你正在使用mysql服务器的时间(NOW())。你确定它们完全匹配并将继续这样做。你应该尝试在任何地方使用mysql服务器时间。

您还在申请人中插入行并从DDFS_applicants中检索。可能是这里的问题

答案 2 :(得分:1)

由于您使用的是时间戳,并且我猜您没有使用数据时间字段,因此转换应该可以解决您的问题。但是有一个但是!

UNIX_TIMESTAMP始终处于GMT状态,因此可能是您的PHP time()与UNIX_TIMESTAMP不同。如果你发现它是相同的,那么你应该是好的!

date_last_applied < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 10 DAY))

答案 3 :(得分:0)

好的,谢谢你的帮助,你们呀。 这段代码完美无缺:

 //get member's info
$result = mysql_query("
   SELECT * FROM DDFS_applicants 
   WHERE FROM_UNIXTIME(date_last_applied, '%Y %D %M') = FROM_UNIXTIME(UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 DAY)), '%Y %D %M')
");
while ($row = mysql_fetch_array($result)) {
    echo $row['id_member'];

(所以它甚至来检查日期是否完全相同。如果你愿意,你甚至可以增加几个小时,但我选择不这样做。)

来源:http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-sub