如何从mysql跟踪数据库中解析数据?

时间:2014-03-26 16:29:56

标签: javascript mysql node.js

我有一个工作事件跟踪器,可以在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(date,"%Y%m%d")AS date,event,count(*)AS count FROM databasetest WHERE date> ="' + daystartdate + '"和日期< ="' + dayenddate +'" GROUP BY YEAR(日期),MONTH(日期),DAY(日期),事件

给我这个:

+----------+----------+-------+
| 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代码中循环结果。我尝试了很多可能的解决方案,但没有让它工作。

谢谢。

1 个答案:

答案 0 :(得分:0)

这是一个非常常见的问题,搜索关键字是"转置" " pivot"。为了省去麻烦,这是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;
});