MYSQL日期范围查询不能正常工作


MYSQL Date range query not working correctly

通过查询日期范围从数据库获取某些数据有问题。在我的数据库中,我有一个格式为YYYY-MM-DD的DATE类型字段。我想获得今天+ 2周(即将过期)的日期范围内的所有数据。

我写过:

$format = 'Y-m-j'; 
$date = date ( $format ); 
$new = date ( $format, strtotime ( '+14 day' . $date ) );   
$start = date("Y-m-d", strtotime($new));        
$today = date('Y-m-d');
$q = "SELECT * FROM listing WHERE dd_end BETWEEN '".$today."' AND '".$start."'";
    while($row = mysql_fetch_assoc($q)){
      $listing_id = $row['listing_id'];
      echo "$listing_id";
}

所以我想要实现的是查询从现在到10月5日的所有行。我已经回显了变量,它们显示它们的格式是正确的(YYYY-MM-DD),以便在数据库中进行比较,但没有返回结果。

任何帮助都将非常感激。万分感谢。

好吧,假设mysql数据库和你的服务器有相同的日期,你可以让mysql数据库做所有的日期计算。

像这样:

SELECT * 
FROM listing 
WHERE dd_end BETWEEN CURDATE() AND (CURDATE() + INTERVAL 14 DAY)

另一方面,我认为Paul S的回答可能会解决你的问题。

编辑:您忘记在mysql_fetch_assoc()函数之前调用mysql_query了。

$result = mysql_query($q);
while ($row = mysql_fetch_assoc($result))
{
   $listing_id = $row['listing_id'];
   echo "$listing_id";    
}

如果dd_end是一个日期,你可能想要阅读MySQL文档中的特定部分:http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#operator_between

对于日期或时间值使用BETWEEN时,为了获得最佳效果,请使用CAST()显式地将值转换为所需的数据类型。示例:如果将DATETIME与两个DATE值进行比较,则转换DATE值到DATETIME值。如果使用字符串常量,例如与DATE进行比较时,将'2001-1-1'字符串强制转换为DATE。

这条路对吗?

$start = date("Y-m-d", strtotime('+14 day' . $date));  

阅读:

http://php.net/manual/en/function.strtotime.php

strtotime有第二个参数

 $format = 'Y-m-j'; 
 $date = date ( $format ); 
 $new = date ( $format, strtotime ( '+14 day' . $date ) );  
 $start = date("Y-m-d", strtotime($new));   
应:

 $new = strtotime('+14 day', time());  
 $start = date("Y-m-d", $new);
 $today = date('Y-m-d');
 $q = mysql_query("SELECT * FROM listing WHERE dd_end BETWEEN '".$today."' AND '".$start."'");
 while($row = mysql_fetch_assoc($q)){
     $listing_id = $row['listing_id'];
     echo "$listing_id";
 }