2014-03-26 37 views
0

我有一个工作事件跟踪器,它将每个事件写入一个mysql表中。如何解析来自mysql跟踪数据库的数据?

id  date    userid  event 
5100 2014-03-25 14:18:55 user333  AI 
5101 2014-03-25 14:19:02 user333  Click 
5102 2014-03-25 14:19:02 user333  Click 
... 

那工作到目前为止非常好。但现在,我想在写node.js的一个小报告工具

我尝试用这个SQL查询来获取值:

SELECT DATE_FORMAT(日期, “%Y%M%d”) AS date,event,count(*)AS count FROM databasetest WHERE date> =“'+ daystartdate +'”AND date < =“'+ dayenddate +'”GROUP BY YEAR(date),MONTH(date),DAY(date ),事件

给我这个:

+----------+----------+-------+ 
| date  | event | count | 
+----------+----------+-------+ 
| 20140320 | AI  |  6 | 
| 20140320 | Click |  2 | 
| 20140320 | swipe |  2 | 
| 20140321 | Click |  6 | 
| 20140321 | error |  5 | 
| 20140321 | swipe |  2 | 
| 20140321 | touch |  3 | 
| 20140322 | AI  |  3 | 
| 20140322 | Click |  3 | 
| 20140322 | error |  1 | 
| 20140322 | mapsload |  3 | 
| 20140322 | touch |  1 | 
| 20140323 | AI  |  2 | 
| 20140323 | Click |  2 | 
| 20140323 | touch |  5 | 
| 20140324 | AI  |  3 | 
| 20140324 | Click |  1 | 
| 20140325 | AI  | 25 | 
| 20140325 | Click | 48 | 
| 20140325 | error | 16 | 
| 20140325 | mapsload |  7 | 
| 20140325 | swipe | 15 | 
| 20140325 | touch | 32 | 
+----------+----------+-------+ 

但我需要的数据格式如下:

+----------+----------+-------+----- 
| date  | Click | AI | .... 
+----------+----------+-------+----- 
| 20140320 | 0  |  6 | 
| 20140321 | 2  |  2 | 
| 20140321 | 2  |  5 | 

这可能与SQL查询或做我需要遍历在我的javascript代码的结果。我尝试了许多可能的解决方案,但没有得到它的工作。

谢谢。

回答

0

这是一个非常常见的问题,关键词搜索是“转置”和“枢轴”。为了节省您的麻烦,这是MySQL无法做到的。尽管如此,SQL Server(MS产品)可以做到这一点。

您将需要遍历输出并自行构建结果集。

var results = [] 
data.forEach(function(row, rowidx) { 
    results[row.date] = results[row.date] || {}; 
    results[row.date][row.event] = results[row.date][row.event] || 0; 
    results[row.date][row.event] += row.count; 
});