MYSQL日期范围查询无法正常工作

时间:2011-09-21 19:39:51

标签: php mysql sql

通过查询日期范围从数据库中获取某些数据时遇到问题。在我的数据库中,我有一个格式为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)以便在数据库中进行比较,但没有结果返回。

非常感谢任何帮助。非常感谢回报。

4 个答案:

答案 0 :(得分:1)

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

  

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

答案 1 :(得分:1)

好吧,假设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";    
}

答案 2 :(得分:0)

读:

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";
 }

答案 3 :(得分:0)

愿这是正确的方法吗?

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