javascript - 提取一年中一个月的字段数并将其导出为 d3.js 的 json

标签 javascript mysql json d3.js line

我有一个以下格式的数据库

reqested_by | request_date
jack |2014-04-13
john |2014-04-12
james|2014-07-01

我想提取一个月内的请求数量。例如在上面的例子中。 2014年4月提出2项请求 2014 年 7 月提出了 1 项请求。 这应该以 json 格式导出,以便在 d3.js 中显示为图表,显示每月的请求数 我尝试提取月份及其计数,但不提取年份

$myquery = " select count(CASE WHEN month(request_date)=1 THEN 1 ELSE NULL END) January, 
                        count(CASE WHEN month(request_date)=2 THEN 1 ELSE NULL END) February,
                        count(CASE WHEN month(request_date)=3 THEN 1 ELSE NULL END) March,
                        count(CASE WHEN month(request_date)=4 THEN 1 ELSE NULL END) April,
                        count(CASE WHEN month(request_date)=5 THEN 1 ELSE NULL END) May,
                        count(CASE WHEN month(request_date)=6 THEN 1 ELSE NULL END) June,
                        count(CASE WHEN month(request_date)=7 THEN 1 ELSE NULL END) July,
                        count(CASE WHEN month(request_date)=8 THEN 1 ELSE NULL END) August,
                        count(CASE WHEN month(request_date)=9 THEN 1 ELSE NULL END) September,
                        count(CASE WHEN month(request_date)=10 THEN 1 ELSE NULL END) October,
                        count(CASE WHEN month(request_date)=11 THEN 1 ELSE NULL END) November,
                        count(CASE WHEN month(request_date)=12 THEN 1 ELSE NULL END) December from request";
    $query = mysqli_query($server,$myquery);

    if ( ! $query ) {
        echo mysqli_error();
        die;
    }

    $data = array();
    $len=mysqli_num_rows($query);
    for ($x = 0; $x < mysqli_num_rows($query); $x++) {
        $data[] = mysqli_fetch_assoc($query);

    }

    echo json_encode($data);

输出为

[{"January":"0","February":"0","March":"0","April":"18","May":"2","June":"0","July":"0","August":"0","September":"0","October":"0","November":"0","December":"0"}]

但我无法根据这个值绘制折线图。所以我按原样提取日期并在 d3 中计算月份,但无法根据输入在 x 轴上显示月份。 我应该采用什么方法通过mysql提取数据在d3.js中以折线图显示基于月份的计数

最佳答案

从服务器返回的数据格式为:

[{"January":"0","February":"0","March":"0","April":"18",
  "May":"2","June":"0","July":"0","August":"0",
  "September":"0","October":"0","November":"0","December":"0"}]

我假设当您说要根据该数据创建 d3 折线图时,您的意思是您希望月份名称位于 x 轴上,计数位于 y 轴上。

d3 折线图(和大多数其他)方法期望数据采用数组形式,数组的每个元素代表单个数据点,具有相同的键结构。适用于 d3 的一些可能的数据结构是

  • 数组中的每个数据点作为子数组,x和y值由位置确定

    [ ["January", "0"], ["February", "0"], ... ["December", "0"] ] 
    
  • 数组中的每个数据点作为一个对象,其 x 和 y 值具有相同的属性名称

    [ {x:"January", y:"0"}, {y:"0", x:"February"}, ... {x:"December", y:"0"} ] 
    

如何从您的数据结构获得其中之一?最简单的方法是使用 d3.entries(object) utility function 。此方法(d3 核心库的一部分)采用单个 Javascript 对象并创建一个表示该对象的每个属性的数组。每个属性都转换为其自己的结构对象 {key:propertyName, value:propertyValue}

因此,对查询返回的数据集运行 var dataArray = d3.entries(dataset) 的结果将是

[ {key:"January", value:"0"}, {key:"February", value:"0"}, 
  ... {key:"December", value:"0"} ] 

从那里您可以使用类似于大多数折线图示例的 d3 代码(例如 this one )。

关于javascript - 提取一年中一个月的字段数并将其导出为 d3.js 的 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23453395/

相关文章:

php - 如何从表单中获取多个值并用php将它们分开

javascript - Firefox 中的动态创建内容 iframe 问题

javascript - Chrome扩展程序桌面通知隐藏问题

javascript - iframe - 阻止它下载任何东西

javascript - 如何使用 JQuery 发布对象的 JSON 数组

node.js - 如何在 EJS 中读取 JSON 文件?

Javascript |通过 JSON 的特定键值在 JSON 数组中搜索

javascript - 如何使用来自 Ajax 请求的 json 数据生成高图(使用 angular js)

html - MySQL HTML 表中的替代颜色编码导致 shell 脚本

mysql - 对多于 1 列的 Oracle 查询执行 JOIN