googlecharts中的json DataTable

时间:2013-12-09 08:34:34

标签: php mysql json google-visualization

我在获取正确格式的json字符串时遇到了一些麻烦。

我有一个类似于这样的数据库表:

Table Columns: emp   month   sales 
Table rows:    Bob    1       100
               Bob    2       150
               Jane   1       125
               Jane   2       130
               Mary   1       110
               Mary   2       130

在drawChart()中,我可以创建静态的东西:

var data = google.visualization.arrayToDataTable([
    ['Month', 'Bob', 'Jane', 'Mary],
    ['Jan',  100, 125, 110],
    ['Feb',  150, 130, 130]
    ]);

最后,json字符串需要如下所示:

{"cols":[{"label":"Month","type":"string"},
        {"label":"Bob","type":"number"},
        {"label":"Jane","type":"number"},
        {"label":"Mary","type":"number"}],
"rows":[{"c":[{"v":100},{"v":125},{"v":110}]},
        {"c":[{"v":150},{"v":130},{"v":130}]}]}

但是我无法从表中提取出适当的json格式,这与上面相同。我正在按照这里的步骤...... PHP MySQL Google Chart JSON - Complete Example

但该示例仅适用于单个数据集。如果您要添加多个星期而不是只有一个数据集,那么如何运行查询?

2 个答案:

答案 0 :(得分:0)

要以您想要的格式获取数据,您必须透视数据。有些数据库支持转向,但像MySQL这样的其他数据库则不支持。如果你在没有枢轴支持的情况下陷入困境,那么你必须采用欺骗来实现它。这是你可以做到的一种方式:

SELECT
    month,
    SUM(if(employee = "Bob", sales, 0)) AS Bob,
    SUM(if(employee = "Jane", sales, 0)) AS Jane,
    SUM(if(employee = "Mary", sales, 0)) AS Mary
FROM myTable
GROUP BY month

这要求您提前知道员工姓名是什么,以便您可以编写SQL语句(在编写代码时,或者您可以从另一个SQL查询中提取它们并编写动态SQL查询)。 / p>

答案 1 :(得分:0)

Asgallent,谢谢。你的回复给了我我需要的方向。我能够通过SQL动态完成所有操作。我做了两个查询:1到“saleperson”表获取名称,然后另一个按照你的建议转动数据。对于其他可能会觉得有用的人,以下是我的代码。

查询(注意:我使用的是codeigniter):

$sp_qry = $this->db->query('select * from salespeople');

        $qryString="";
        foreach ($sp_qry->result_array() as $row)
        {
            $qryString.= ",SUM( IF(  `salespeople_id` =" . $row['salespeople_id'] . ",  `num_sold` , 0 ) ) AS " . $row['name'];
        }

        $qry= "SELECT  `month` " . $qryString . " FROM  `product_sales` 
              GROUP BY  `month`";

        $query = $this->db->query($qry);
        return $query->result_array();

并在我的查看页面中

$rows = array();
$table = array();
$cols = array();
$cols[] = array('label' => 'Month', 'type' => 'string');
foreach ($salespeople as $sp)
   {
       $cols[] = array('label' => $sp['name'], 'type' => 'number');
   }

$table['cols'] = $cols;


foreach ($sales as $chart_item)
{  
    $tmp=array();
    $tmp[] = array('v' => (string) $chart_item['month']);
    foreach ($salespeople as $sp)
    {
        $name=$sp['name'];
        $tmp[] = array('v' => (int) $chart_item[$name]);
    }

    $rows[] = array('c' => $tmp);
}

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