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