我试图从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正在抛出错误。
12处的点应读为0,而是插入11到13之间。
这是我的图表,其值为:
在这种情况下,我需要小时1-> 9,12和15-> 24才能显示0。
答案 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);