通过查询日期范围从数据库获取某些数据有问题。在我的数据库中,我有一个格式为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.phpstrtotime有第二个参数
$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";
}