找到最早的日期 - PHP

时间:2011-08-22 20:15:19

标签: php sql mysql

我使用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 !!

5 个答案:

答案 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);