我有一个以下格式的数据库
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/