2014-12-12 6 views
-1

'반환 된'값 중 한 달에 '1'이 얼마나 많은지 계산하려고합니다. 내가 원하는 것은 두 배열에 몽 당 총 얼마나 그들 중 많은 한 달에 1을 포함에 얼마나 많은 레코드를 저장하는 것입니다특정 값을 포함하는 행의 수를 계산하는 방법

$data1y=array(); 
$data2y=array(); 

$months_sql = array(); 


for ($i = 1; $i <= 12; $i++) { 
    $months_sql[] = date("F", strtotime(date('Y-m-01')." -$i months")); 
} 


    $sql = "SELECT returned, MONTHNAME(date_in) AS date_in 
     FROM item 
     WHERE date_in >= NOW() - INTERVAL 1 YEAR"; 

    $query = mysql_query($sql); 


    foreach($months_sql as $month) 
    { 
     while ($row = mysql_fetch_array($query)) 
     { 
      if($row['date_in'] = $month && $row['returned']=='1') 
      { 
       $counter_returned++; 
      } 
      $counter_total++; 
     } 
     $data1y[] = $counter_returned++; 
     $data2y[] = $counter_total++;; 
    } 

: 이것은 내가 지금까지있어 것입니다.

+5

대신 MySQL의'COUNT()'집계 함수를 사용하지 않는 이유는 무엇입니까? –

+0

왜냐하면 나는 현재 달에 대한 데이터가 없다면 0을 표시하기를 원하기 때문에 mysql을 사용하여 수행 할 수 없습니다. – Genov

+1

그래서 COUNT 집계 함수의 가능한 null을 handdle하면됩니다. If 문이 트릭을 수행합니다. – ericpap

답변

-1

루프가 버그입니다. months_sql 배열의 첫 번째 달만 확인합니다 (11 월, 제 생각에는?). 다음 달에는 가져올 DB 결과가 더 이상 없을 것입니다.

당신은 그들을 전환해야하고, 당신이 그렇게하면, 당신의 카운터는 그들이 당신의 DB 데이터는 한달에 치료를받지 않을 때문에에 속하는 달 식별해야합니다에

while ($row = mysql_fetch_array($query)) 
{ 
    foreach($months_sql as $month) 
    { 
     if($row['date_in'] == $month) 
     { 
      if($row['returned']=='1') 
      { 
       $data1y[$month]++; 
      } 
      $data2y[$month]++; 
     } 
    } 
} 

빠른 방법

foreach($months_sql as $month){ 
    $data1y[$month]=0; 
    $data2y[$month]=0; 
} 
: 당신은 모든 달 동안 0으로 데이터를 초기화하여 DB 쿼리하기 전에이 작업을 추가 할 경우, 두 경우 모두 수()

$sql = "SELECT MONTHNAME(date_in) AS date_in, returned, count(*) as count 
    FROM item 
    WHERE date_in >= NOW() - INTERVAL 1 YEAR 
    GROUP BY date_in, returned;"; 
$query = mysql_query($sql); 

while ($row = mysql_fetch_array($query)) 
{ 
    if(in_array($row['date_in'], $months_sql)) 
    { 
     if($row['returned']=='1') 
     { 
      $data1y[$month] = $row['count']; 
     } 
     $data2y[$month] += $row['count']; 
    } 
} 

이 작업을 수행