Php SQL选择10天前的日期失败

Php SQL选择10天前的日期失败,php,mysql,date,Php,Mysql,Date,我在SQL方面遇到了一些问题: 首先,我使用PHP时间插入当前日期: mysql_query(" INSERT INTO applicants ( date_last_applied ) VALUES ( " . time() . " ) "); 这个很好用。但是,我只想在10天前插入^1时执行操作: $result = mysql_query(" SELECT * FROM applicants WHERE date_last_appli

我在SQL方面遇到了一些问题:

首先,我使用PHP时间插入当前日期:

mysql_query("
   INSERT INTO applicants (
      date_last_applied
   )
   VALUES (
      " . time() . "
   )
");
这个很好用。但是,我只想在10天前插入^1时执行操作:

$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'];
虽然在我看来它应该是有效的,但事实并非如此。D:


对于可能的解决方案:不能使用其他时间格式,因为我在整个网站上都使用这种格式。

我认为将日期转换为unixtime将解决您的问题

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

我认为将date_sub Resultl转换为unixtime将解决您的问题

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

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


此外,您正在申请者中插入行并从DDFS_申请者中检索。这可能是插入使用本地计算机时间的行时出现的问题。但是在检索行时,您现在正在使用mysql服务器的时间。您确定它们完全匹配并且将继续匹配吗。您应该尝试在任何地方使用mysql服务器时间


此外,您正在申请者中插入行并从DDFS_申请者中检索。可能这就是问题所在

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

UNIX_时间戳总是以GMT为单位,因此可能是您的PHP时间与UNIX_时间戳不同。如果你发现它是一样的,那么你应该是好的

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

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

UNIX_时间戳总是以GMT为单位,因此可能是您的PHP时间与UNIX_时间戳不同。如果你发现它是一样的,那么你应该是好的

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

好的,谢谢你们的帮助。 此代码完美地工作:

 //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'];
因此,它甚至可以检查日期是否完全相同。如果你愿意,你甚至可以增加几个小时,但我选择不这样做


资料来源:

好的,谢谢大家的帮助。 此代码完美地工作:

 //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'];
因此,它甚至可以检查日期是否完全相同。如果你愿意,你甚至可以增加几个小时,但我选择不这样做


资料来源:

应该有效与实际有效-希望和祈祷与单元测试。应该有效与实际有效-希望和祈祷与单元测试。到目前为止,我在使用此时间格式时没有遇到任何问题。@你最后的选择:对不起,那是个打字错误。这一部分在我的原始代码中是正确的。到目前为止,我在使用此时间格式时没有遇到任何问题。@你最后的选择:对不起,那是个打字错误。这部分在我的原始代码中是正确的。这不起作用。当WHERE在所有行上为true时,它返回所有行,但如果只有一行为true,则不返回任何行。:/我还尝试将它们都转换为UNIX_时间戳,但也失败了。这不起作用。当WHERE在所有行上为true时,它返回所有行,但如果只有一行为true,则不返回任何行。:/我还尝试将它们都转换为UNIX_时间戳,但也失败了。我很确定这是一样的。顺便说一句,这并不重要,因为当所有行在几天前生成时,您的代码只返回所有内容或不返回任何内容,而当一行在几天前生成时,则不返回任何内容,而我有两个条目,一个是一天前的,另一个是三天前的。这是一个很大的不同,所以无论如何它应该是有效的。我很确定它是一样的。顺便说一句,这并不重要,因为当所有行在几天前生成时,您的代码只返回所有内容或不返回任何内容,而当一行在几天前生成时,则不返回任何内容,而我有两个条目,一个是一天前的,另一个是三天前的。这是一个相当大的差异,所以它应该无论如何工作。