2014-09-18 13 views
0

我試圖從MySQL數據庫中按小時計算某個給定ID的記錄數。在Google可視化圖表中將所有缺失的數據點初始化爲0

我遇到的問題是,如果給定小時內給定ID有0條記錄,我不會爲該表生成數據點。如果 在小時之間不計數,這將導致表格在兩個計數之間進行插值。

例如:下午1點4條記錄,下午2點0條記錄,下午3點2條記錄。該表將在4和2之間畫出一條直線,以便在桌面上出現下午2點有3條記錄,而實際上沒有記錄。

我確定原因是我沒有爲不存在的記錄提供null或0值,但我不知道如何去做。

在桌子上的一些信息:

id    int AI 
TagNumber  int 
TimeStamp  timestamp 
BatteryStatus varchar 
Location  int 

這裏是我使用數以小時爲單位給定TagNumber的實例數的PHP代碼。

$result = $mysqli->('SELECT hour(TimeStamp) as Hour, count(*) as Count FROM table WHERE Location = 1 AND TagNumber = 12345678 GROUP BY Hour'); 
// The values here are hard coded for testing purposes. 

$rows = array(); 
$table = array(); 
$table['cols'] = array(
    array('label' => 'Hour', 'type' => 'number'), 
    array('label' => 'Count', 'type' => 'number') 
); 

while($row = mysqli_fetch_assoc($result)) { 
    $temp = array(); 
    $temp[] = array('v' => (int) $row['Hour']); 
    $temp[] = array('v' => (int) $row['Count']); 
    $rows[] = array('c' => $temp); 
} 
$table['rows'] = $rows; 
$jsonTable = json_encode($table); 

然後我將json編碼表傳遞給google可視化api。

我相信我需要做的是每隔1到24小時設置一次沒有從mysql查詢返回的記錄設置爲0,我只是不知道如何實現這一點。

我試着用0作爲'Count'值來初始化一個從1到24的小時數組,但我肯定是做了錯誤的事情,而且PHP正在拋出錯誤。 enter image description here

在12點應讀0,而是它插11和13

之間這是我的圖與當前值:

  • 小時10 - >計數4
  • 11小時 - >計數2
  • 小時13 - >計數1
  • 小時14 - >計數3

在這種情況下,我需要時間1-> 9,12,和15-> 24顯示出0。

回答

1

試試這個:

$result = $mysqli->('SELECT hour(TimeStamp) as Hour, count(*) as Count FROM table WHERE Location = 1 AND TagNumber = 12345678 GROUP BY Hour'); 
// The values here are hard coded for testing purposes. 

$rows = array(); 
$table = array(); 
$table['cols'] = array(
    array('label' => 'Hour', 'type' => 'number'), 
    array('label' => 'Count', 'type' => 'number') 
); 

$hoursNotAvail = array(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23); 
while($row = mysqli_fetch_assoc($result)) { 
    $temp = array(); 
    $temp[] = array('v' => (int) $row['Hour']); 
    $temp[] = array('v' => (int) $row['Count']); 
    $rows[] = array('c' => $temp); 
    $hoursNotAvail[(int) $row['Hour']] = -1; 
} 
foreach($hoursNotAvail as $k => $v){ 
    if($v != -1){ 
     $temp = array(); 
     $temp[] = array('v' => $k); 
     $temp[] = array('v' => 0); 
     $rows[] = array('c' => $temp); 
    } 
} 

$table['rows'] = $rows; 
$jsonTable = json_encode($table); 
+0

謝謝,我終於實現了非常類似的東西結束。很棒 – lrich 2014-09-19 14:34:48