0

真正的问题是,当日期用于第一列时,如何从 MySql 查询中填充 Google 图表数据表?

我正在尝试使用 Google Charts API 创建柱形图。问题是数据是时间序列数据。有许多日期表示。创建数据表的方法是将第 0 列分配给日期,随后的每一列代表正在测量的数据。该信息来自文档。我只是不知道如何将数据分配给后续列。我现在已经对此进行了广泛的研究,并且有一些答案很接近,但我不能让它们为此工作。这是当前生成我的图表数据表的代码:

$invArr = array('cols' => array(

                          array('label' => 'date', 'type' => 'date'),
                          array('label' => 'SKU', 'type' => 'number')),
          'rows' => array());

while($row = mysql_fetch_row($query)) {
   $invArr['rows'][] = array('c' => array(array('v' => $row[0]), array('v' => $row[1])));
} 

我从 Google 图表文档中了解到,第 0 列始终是连续数据的日期。随后的每一列都是正在测量的数据,在这种情况下是 SKU 编号。我需要让每行中的第一个数组代表日期,随后的数组代表 qtyoh 数据。我不知道该怎么做。

4

1 回答 1

0

我研究了几天,终于能够通过拼凑许多不同问题的答案来解决这个问题。

我首先查询不同的日期并将它们放入一个数组中。这样做的方式非常重要,因为日期在 json 编码时是一个字符串。将其解析并准确地以 Date(year,month,day) 格式传递是很重要的。稍后使用变量来表示日期也很重要。

$dateArray = array();

while($row = mysql_fetch_row($queryDates)) {

    $dtArray = explode('-',$row[0]);
    $day = (int) $dtArray[1];
    $month = ((int) $dtArray[0])-1;
    $year = (int) $dtArray[2];
    $dateArray[] = "Date($year, $month, $day)";

}

然后,我通过循环查询 SKU 来设置表的列。

$invArr = array(
    'cols' => array(
        array('label' => 'Date', 'type' => 'date')
        )
    );

 while($row = mysql_fetch_row($querySkus)) {
$invArr['cols'][] = array('label' => $row[0], 'type' => 'number');

}

然后我查询数量并将它们放入一个数组中。然后我遍历每个值并填充表数组 ($inVarr)。

$quantities = array();
while($row = mysql_fetch_row($queryQty)) {
     $quantities[] = (int) $row[0];
}

$qtyCounter = 0; 
for($i=0;$i<count($dateArray);$i++) {

   $invArr['rows'][] = array(
        'c' => array(
                array('v' => $dateArray[$i]),
                array('v' => $quantities[$qtyCounter]),
                array('v' => $quantities[$qtyCounter+1]),
                array('v' => $quantities[$qtyCounter+2])
                )
              );
   $qtyCounter=$qtyCounter+3;

}

然后我可以回显 json 编码数组,它将返回数据表的数据。

回声 json_encode($invArr);

我相信这有点笨拙,但它确实有效。

于 2013-07-06T04:53:01.177 回答