通过mysql数据库中的sequelizejs将数据加载到图表中

时间:2015-01-12 10:01:11

标签: javascript mysql sequelize.js c3.js

我使用过这个chart库,但我不知道如何将数据加载到它中。我从未将数据从mysql加载到图表。所以我不知道什么是最佳做法...

所以我在MySQL表中订购了如下行:

id | price | kind | orderdate
-----------------------------
1  |  35   | 2    | 2013-01-01
2  |  30   | 1    | 2013-01-01
3  |  25   | 3    | 2013-01-01
4  |  15   | 2    | 2013-01-01

更多c3js加载数据的格式如下:

   columns: [
        ['x', '2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04', '2013-01-05'],
        ['kind1', 30, 200, 100, 400, 150],
        ['kind2', 30, 200, 100, 400, 150],
        ['kind3', 30, 200, 100, 400, 150],
    ]

所以我创建了日期数组,如下面['x', '2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04', '2013-01-05'],我需要每个这个日期,例如kind = 1的行数。 但我不知道MySQL查询必须如何......我需要查询日期数组中的每个日期吗? 或者有更好的方法吗?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

首先,您需要从服务器上的表中提取数据,并在浏览器中将其转换为javascript。该怎么做取决于你使用的是什么,例如PHP,但查询可能是这样的:

select   orderdate, kind, sum(price) as total
from     #orders
where    orderdate between '1 Jan 2013' and '10 jan 2013'
group by orderdate, kind

我的偏好是通过JSON API公开数据,因此您可以使用以下格式从网址(以&到日期为参数)获取数据:

[
{'orderdate':'2013-01-01', 'kind': 1, 'total': 30},
{'orderdate':'2013-01-01', 'kind': 2, 'total': 50},
{'orderdate':'2013-01-01', 'kind': 3, 'total': 25},
{'orderdate':'2013-01-02', 'kind': 1, 'total': 30},
{'orderdate':'2013-01-02', 'kind': 2, 'total': 20},
{'orderdate':'2013-01-02', 'kind': 3, 'total': 23}
]

然后将数据“转置”到您需要的列中:

['x', '2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04', '2013-01-05'],
['kind1', 30, 200, 100, 400, 150],
['kind2', 30, 200, 100, 400, 150],
['kind3', 30, 200, 100, 400, 150],

第一栏是直截了当的,因为你有来自&到了约会。

要构建第2,3,4行,假设您知道种类列表:

for each kind:
 create an array, eg: var data = ['kind1'];
 initialise a sum variable, eg: var sum = 0;
 for each date (in the correct order):
  loop through the array, if the date & the kind match, add to the sum variable
 add the sum to the array, eg: data.push(sum);

应该这样做吗?