php - 按年、月、周和日分组数据
问题描述
我有一个带有销售记录的 MySQL 数据库,我想做的是生成一个 JSON,它显示最旧日期和最近日期之间的所有日期,然后按年、月、周和日对该信息进行分组,每天都会显示一个数字(代表当天销售的数量),如果没有与该日期匹配的数据,则该数字应为 0。
我实际上是在使用 PHP 来解决这个问题。我尝试了很多解决方案,但似乎没有一个有效。
这是我在 PHPMyAdmin 上执行的查询的屏幕截图:https ://prnt.sc/pe4twq
最终的 JSON 应该是这样的:
[
{
"year":"2019",
"months":{
"January":{
"week 1":{
"day 3":{
"total":"3400"
}
}
}
}
}
]
编辑:这是我尝试过的一些代码
foreach ($rows as $row):
$date = $row['date'];
$dates[] = $date;
$first = reset($dates);
$first = strtotime($first);
$last = end($dates);
$last = strtotime($last);
$year = date('Y', strtotime($date));
$years[] = $year;
endforeach;
//86400 = 24 hours
for($i = $first; $i <= $last; $i+=86400) {
$dt = date('Y-m-d', $i);
$y = date('Y', strtotime($dt));
$m = date('n', strtotime($dt));
$w = date('W', strtotime($dt));
$d = date('D', strtotime($dt));
$allYears[] = $y;
if (in_array($dt, $dates)) {
$result[] = ['year' => $y, 'month' => $meses[$m], 'week' => $w, 'day' => $dias[$d], 'total'=>$row["total"]];
} else {
$result[] = ['year' => $y, 'month' => $meses[$m], 'week' => $w, 'day' => $dias[$d], 'total'=>"0"];
}
}
echo json_encode($result);
我在这里所做的是在我的数据库中生成第一年和最后一年之间的所有日期,然后将总数分配给每个日期,为每年的每个日期生成一个 JSON 对象:http: //prntscr.com/ pe4yjj
解决方案
推荐阅读
- javascript - 使用 vuejs 渲染视频对象
- angular - 如何使渲染器 setStyle 方法工作
- python - 如何从具有不同日期时间索引的另一个数据框中获取列值
- c++ - 尝试写入文件时 C++ 中的循环错误
- webpack - webpack没有得到与输出`build`文件夹相同的名称,而是获取数字值
- javascript - 隐藏 toString 已更改的事实
- sql - SQL中的花括号
- vue.js - Vue路由器推送相同路径不同的查询或参数,重新加载页面的不同内容
- python - 覆盖保存方法以在 django 模型中保存 IP 地址
- javascript - 将变量的值从测试传递到赛普拉斯中的下一个