问题
我想使用Chartjs创建基于时间的堆积条形图,但是缺少时间值。我有两个问题:
1。)如何在SQL查询中或从Ajax响应构建数组时,如何用零填充缺失的数据?
2。)有比使用不需要丢失数据的堆叠图表更好的方法来使用chartjs可视化数据吗?
以下是按月份汇总的简单说明。 在生产中,这可以动态更改为每周或每天的摘要。在jsFiddle上可用的工作示例>
期望的结果:
+----+ |Bill| +----+ +----+ | | |Bill| |Bill| |----| |----| +----+ |Joe | |Mary| |Mary| +----+ +----+ +----+ Jan Feb Mar
这是数据库表的超级简化版本,用于说明问题。
Orders table: +--------+---------+-------+ |Salesman| Order # | Month | +--------+---------+-------+ |Bill | 10500 | Jan | |Bill | 10501 | Jan | |Joe | 10867 | Jan | |Mary | 10892 | Feb | |Bill | 12527 | Feb | |Mary | 12741 | Mar | |Bill | 13292 | Mar | +--------+---------+-------+
SELECT salesman, month, count(*) as orders FROM orders GROUP BY month, salesman ORDER BY month, Salesman +------+----------+--------+ |Month | Salesman | Orders | +------+----------+--------+ |Jan | Bill | 2 | |Jan | Joe | 1 | |Feb | Mary | 1 | |Feb | Bill | 1 | |Mar | Mary | 1 | |Mar | Bill | 1 | +------+----------+--------+
[Mary没有Jan的条目,而Joe没有Feb和Mar的条目。当我从ajax响应构建数组时,我的x值的chart.data.labels数组是[Jan,Feb,Mar],但是y值的chart.datasets [n] .data看起来像这样:
Bill : [2,1,1] Joe : [1] Mary: [1,1]
它们应该看起来像这样:
Bill : [2,1,1]
Joe : [1,0,0]
Mary: [0,1,1]
我想使用Chartjs创建基于时间的堆积条形图的问题,但是我缺少时间值。我有两个问题:1.)如何在SQL中用零填充缺少的数据...
@@ nbk通过数据透视表提供了解决方案的线索。这是我的解决方案,控制器中的PHP函数可为数据透视表动态构建SQL。