我使用PHP执行SQL以在日期范围之间从数据库中提取一些数据。日期在关系中存储为日期:
$from = "2011-08-11";
$to = "2011 - 08- 25";
$query = mysql_query("SELECT date FROM `entries` WHERE date BETWEEN '$from' AND '$to' ORDER BY date ASC");
我想找到关系中最早的日期。
如果查询成功,我将'date'属性存储在名为$ dates的php数组中。我想我可以迭代这个$ date并在将它们转换为日期后比较$ date值。
if($query){
$dates = array();
while($row = mysql_fetch_array($query)){
$dates[] = $row['date'];
}
$min = strftime("%Y-%m-%d", strtotime($dates[0]));
for($i = 1; $i < count($dates); $i++){
if($dates[i] < $min){
$min = $dates[i];
}
}
然而这不起作用......它打印随机值....也许有一个更简单的方法来做到这一点,我过于复杂的事情......
HEEEELLLP !!
答案 0 :(得分:3)
如果您订购了查询,那么它将是您查询中的第一行(或最后一行)。所以你不需要找到它。
答案 1 :(得分:1)
而不是
$min = strftime("%Y-%m-%d", strtotime($dates[0]));
你应该使用
$min = date("%Y-%m-%d", strtotime($dates[0]));
答案 2 :(得分:1)
最简单的方法是使用第一个日期,因为您知道它已经是SQL语句中ASC
最早的日期。在将行读入数组后,只需使用第一个元素。
while($row = mysql_fetch_array($query)){
$dates[] = $row['date'];
}
$earliest_date = $dates[0];
答案 3 :(得分:1)
如果你想做的只是找到最早的日期,并且你不关心其余的日期,你可以在查询中使用汇总函数min(),如下所示:
SELECT MIN(date) AS earliest FROM `entries` WHERE date BETWEEN '$from' AND '$to'
然后从php代码中的结果集中获取earliest
列。
答案 4 :(得分:0)
将日期转换为数字并对数组进行排序?
拿走你所拥有的(第1-5行),
foreach ($dates as $date) {
// convert each date from "YYYY-MM-DD" to "YYYYMMMDD" and turn it into an int
$date = intval(str_replace("-", "", $date));
}
// sort the array from lowest to highest
asort($dates);
// the minimum is the first item in the array
$minint = $date[0];
// convert back into "YYYY-MM-DD" format
$min = substr($minint, 0, 4) . "-" . substr($minint, 4, 6) . "-" . substr($minint, 6);