使用 MySQL 遍历时间戳

Iterate through timestamps with MySQL

所以,这应该是一个简单的。我有一个 JS 图表需要像这样的数组中的数据:

var seriesData = [
   [13.58, 14.99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],  //this is the totals in month order
   [0, 0, 17.32, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    //lines are repeated per category in table
]; 

mysql table 中的数据看起来像这样:

----------------------------------------------
| t_id |    t_date    | t_total | t_category |   //very simplified 
|   1  |  1483257600  |  13.58  |    C1      |   //there are a lot more categories
|   2  |  1485936000  |  14.99  |    C1      |   //but this gives the idea
|   3  |  1488355200  |  17.32  |    C2      |   //dates will be random
----------------------------------------------

我需要的

最终结果应该在 table 中的每个类别的数组中打印出一个新元素,类别总数的 SUM 按月顺序排列(当前年份)。

这是我对 SQL 的了解(是的,不是很多),但我从这里开始就卡住了。

mysqli_query($mysqli,"select sum(t_total), FROM_UNIXTIME(t_date, '%Y') AS year from table 
where FROM_UNIXTIME(t_date, '%Y') = year(curdate()) group by t_category");

那里的 PHP/SQL 研究人员可以给我一些指导吗?

谢谢大家

没错。花了更多时间在这上面,我找到了解决方案:

我知道这是一个特定案例,但万一其他人正在寻找这个,那么这可能会有所帮助。

var seriesData = [
<?
$gc = mysqli_query($mysqli,"select distinct `t_category` from `table` where `t_user` = '1' and `t_status`='$tstatus' order by `t_category` asc ")or die(mysqli_error($mysqli));
  if(mysqli_num_rows($gc) > 0){
    while($gcr = mysqli_fetch_assoc($gc)){
      $categ = $gcr["t_category"];
      $start = $month = strtotime('first day of january this year');
      $end = time();
      $gsmarr = [];
        while($month < $end){
          $mnmb = new DateTime("@$month");
          $mn = $mnmb->format('n');
          $gs = mysqli_query($mysqli,"select sum(`t_total`) as `grspc` from `table` where `t_user`='1' and `t_category`='$categ' and `t_status`='$tstatus' and month(from_unixtime(`t_date`)) = '$mn' ")or die(mysqli_error($mysqli));
             while($gsr = mysqli_fetch_assoc($gs)){
               if($gsr["grspc"] == ""){
                  array_push($gsmarr,'0');
               }else{
                  array_push($gsmarr,$gsr["grspc"]);
               }
             }
          $month = strtotime("+1 month", $month);
      }
    $impmnt = implode(',',$gsmarr);
    echo "[".$impmnt."],";
   }
  }else{
     echo "oops";
  }
?>
];