2011-08-22 5 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"); 

관계에서 가져온 가장 빠른 날짜를 찾고 싶습니다.

쿼리가 성공하면 '날짜'속성을 $ dates라는 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

내 대답은 동일 그래서 코드 예제를 제공, 당신은 (행 1-5) 무엇을 가져 가라. – 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

날짜를 숫자로 변환하고 배열을 정렬 하시겠습니까?

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 : 추한 해킹. 그는 그냥 문자열을 정렬 할 수 있습니다. –