在Google可视化图表中将所有缺失的数据点初始化为0

时间:2014-09-18 18:13:17

标签: javascript php google-visualization

我试图从MySQL数据库中按小时计算某个特定ID的记录数。

我遇到的问题是,如果在给定的小时内给定ID有0条记录,我就不会为该表生成数据点。这会导致表在两个计数之间进行插值 不计算时间。

ex:下午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 visualization api。

我认为我需要做的是设置1到24之间的每小时没有从mysql查询返回的记录设置为0,我只是不知道如何实现。

我尝试将小时数组从1到24初始化为0,因为' Count'价值,但我肯定做错了,php正在抛出错误。 enter image description here

12处的点应读为0,而是插入11到13之间。

这是我的图表,其值为:

  • 第10小时 - >数4
  • 第11小时 - >数2
  • 第13小时 - >数1
  • 第14小时 - >数3

在这种情况下,我需要小时1-> 9,12和15-> 24才能显示0。

1 个答案:

答案 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);