2013-01-08 2 views
2

지난 30 일 동안 실행중인 목록의 mysql db에서 특정 클라이언트에 대한 호출 수의 배열을 작성합니다. 나는 지금까지 배열에 호출이있는 요일을 추가하기 위해 작동하지만 아무 호출도없는 날 ('db에 항목 없음')에는 '0'이 필요합니다. 여기에 지금까지 나에게 코드입니다 :결과가없는 MySQL 쿼리에 대한 에코 0

$query="SELECT COUNT(*) FROM my_db WHERE client_phone='clint_phone#' GROUP BY calldate"; 
$result = mysql_query($query); 
    $data = array(); 
    while ($row = mysql_fetch_row($result)) { 
     $data[] = $row[0]; 
    } 

난 그냥 오늘은 30 개 통화를했고, 어제는 0이 있었다, 나는 그것이 [30,0]를 표시해야하는 경우 표시하는 방법이 필요합니다. 내가 가진 것만 보여 주겠다.

EDIT * 나는 mysql db will 열 client_phone, calldate 있습니다. 배열의 데이터를 사용하여 그래프를 작성하려고합니다. 그래프의 각 지점은 해당 날짜의 해당 클라이언트에 대한 하루 및 호출 수를 나타냅니다. 위의 쿼리를 작성하여 해당 배열을 채 웁니다. 나는 30 일을 거꾸로 세우려고 노력하고 있고, 매일 매일의 전화를 배열에 넘겨주고있다.

편집 2 * 거의 다 가지고 있습니다. 'foreach'영역에서 문제가 발생했습니다. 아래는 배열을 덤프 할 두 print_r()의 코드입니다. 첫 번째는 좋아 보인다지만, 두 번째는 그 안에 걸쳐 작성된 일부 배열 항목이 점점 보여줍니다

$query="SELECT calldate, COUNT(*) FROM my_db WHERE client_phone='phone#' and calldate>='20130101' AND calldate<='20130107' GROUP BY calldate ORDER BY calldate"; 
$result = mysql_query($query); 
    $data = array(); 
    while ($row = mysql_fetch_array($result)) { 
     $data[$row['calldate']] = $row[1]; 
    } 

$startDate = '20130101'; 
    $endDate = '20130107'; 
    $dates = array(); 

    for($current = $startDate; $current != $endDate; $current = date('Ymd', strtotime("$current +1 day"))) { 
     $dates[] = $current; 
    } 
    $dates[] = $endDate; 

print_r ($data); 
echo "<br />"; 

foreach($dates as $date){ 
if (in_array($date, $data)) { 
    // that date was found in your db_date array(therefore had queries) 
}else{ 
$data[$date] = 0; //date was not found in your db_array so we set that date with no queries to zero 
} 
} 

print_r ($data); 

나는 브라우저에서 실행하고 나는이 얻을 :

Array ([20130101] => 1 [20130104] => 6 [20130105] => 2 [20130106] => 1 [20130107] => 3) 
Array ([20130101] => 0 [20130104] => 0 [20130105] => 0 [20130106] => 0 [20130107] => 0 [20130102] => 0 [20130103] => 0) 

을 윗부분의 출력 결과가 좋아 보이는데, data [] 배열에없는 날짜에 할당 된 0이 누락되었습니다. 두 번째 배열은 누락 날짜가 0이지만 다른 문자는 지나치게 길지 않아야합니다.

도움 주셔서 감사합니다.

+0

데이터베이스 구조가 내 컨텍스트에서 무엇인지 모르겠다. 하루에 쿼리가 의미하는 바가 무엇인지 모르겠다 ... 테이블에있는 변수 중 하나입니까? 더 자세히 설명해주세요. 배열에없는 모든 날짜에 호출이없고 해당 일에 0을 배열에 삽입하려는 것입니까? –

+0

추가 세부 사항 추가 – Milksnake12

+0

'my_db' 구조 및 항목을 표시 할 수 있습니까? –

답변

0

그 시간대에있는 모든 날짜를 찾고 그에 대한 작업을하는 것은 솔루션의 표준이 아닙니다. 그러나 호스트가 cron-tasks를 허용하는지에 따라 달라집니다. 그 날에 querys가 작성되지 않으면 cron 태스크를 사용하여 해당 날짜의 오후 11:59에 데이터베이스에 0을 자동으로 삽입 할 수 있었다면; 당신은 단순히 모든 날짜를 추출 할 수 있습니다.

당신은 내가 당신이 이런 식으로 관리 할 수 ​​있다고 생각 크론 작업을 함께하지 않으려면 ...

 $startDate = '2009-01-28'; 
     $endDate = '2009-02-04'; 
     $dates = array(); 

     for($current = $startDate; $current != $endDate; $current = date('Y-m-d', strtotime("$current +1 day"))) { 
      $dates[] = $current; 

     $dates[] = $endDate; 
    } 

다음이

foreach($dates as $date){ 
if (array_key_exists($date, $data)) { 
    // that date was found in your db_date array(therefore had queries) 
}else{ 
$data[$date] = 0; //date was not found in your db_array so we set that date with no queries to zero 
} 
} 

이 약간의 조정으로 인해 필요할 수 있습니다 할 나는 그것을 시험하지 않았다. 그러나 이것은 효과가있다; 그렇지 않으면 매우 가까이에 있어야합니다. 희망이 도움이됩니다.

+0

PHP로 약간 새로 왔지만 항목이없는 요일에는 배열에 '0'이 추가되는 것을 보지 못했습니다. – Milksnake12

+0

죄송합니다. 내 관점에서 보면 귀하의 테이블에있는 귀하의 데이터가 어떻게 처리 되었는가가 불분명하기 때문에 귀하가 의미하는 바를 오해 한 것입니다. –

+0

배열에 대해 print_r()을 실행할 때 날짜가 키가 될 것이라고 생각하지 않습니다. Array ([0] => 3 [1] => 1 [2] => 3 [3] => 1) 등. 첫 번째 게시물을 기반으로 날짜를 키로 사용하려면 다른 작업을 수행해야합니까? – Milksnake12

관련 문제