首页 > 解决方案 > 按年、月、周和日分组数据

问题描述

我有一个带有销售记录的 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

标签: phpmysql

解决方案


推荐阅读