我在获取正确格式的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
但该示例仅适用于单个数据集。如果您要添加多个星期而不是只有一个数据集,那么如何运行查询?
答案 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);