2011-08-22 164 views
1

我使用PHP執行SQL,以便在日期範圍內從我的數據庫中提取一些數據。日期存儲爲關係中的日期:查找最早日期 - PHP

$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'屬性存儲在名爲$日期的php數組中。我想我可以遍歷這個$日期,並將它們轉換爲日期後比較$日期值。

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!

回答

3

如果您命令查詢,那麼它將是您查詢中的第一個(或最後一個)行。所以你不需要找到它。

+0

我的答案是一樣的,所以我提供了一個代碼示例。 – styfle

1

而不是

$min = strftime("%Y-%m-%d", strtotime($dates[0])); 

你應該使用

$min = date("%Y-%m-%d", strtotime($dates[0])); 
1

最簡單的方法是,因爲你知道它已經在你的SQL語句最早因ASC使用的第一天。在將行讀入數組後,只需使用第一個元素。

while($row = mysql_fetch_array($query)){  
    $dates[] = $row['date']; 
} 

$earliest_date = $dates[0]; 
1

如果你想要做的就是找到剛纔的最早日期,而你不關心其他情況,你可以使用聚合函數min()在您的查詢像這樣:

SELECT MIN(date) AS earliest FROM `entries` WHERE date BETWEEN '$from' AND '$to' 

然後在php代碼中抓取結果集中的earliest列。

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); 
+0

-1:醜陋的黑客。他可能只是對琴絃進行排序。 –