Php 根据周将日期范围拆分为周和总和列

Php 根据周将日期范围拆分为周和总和列,php,mysql,Php,Mysql,所以我从一个数据库中调用数据,其中每个记录都与一列“开始时间”、“不显示”和“取消”相关联。是否成功出勤取决于“没有显示”和“取消”==0 我想查看这项选择的结果,并每周(根据开始时间)统计没有演出、取消和出席的人数。我怎样才能做到这一点 用户将提供一个日期范围,数据库将根据该日期范围选择记录。现在,这个日期范围必须按周分割,然后得到计数。我完全陷入了按周计算的部分。这就是我到目前为止所做的: // Multidimensional Array with [boolean][week #

所以我从一个数据库中调用数据,其中每个记录都与一列“开始时间”、“不显示”和“取消”相关联。是否成功出勤取决于“没有显示”和“取消”==0

我想查看这项选择的结果,并每周(根据开始时间)统计没有演出、取消和出席的人数。我怎样才能做到这一点

用户将提供一个日期范围,数据库将根据该日期范围选择记录。现在,这个日期范围必须按周分割,然后得到计数。我完全陷入了按周计算的部分。这就是我到目前为止所做的:

    // Multidimensional Array with [boolean][week #]
  $no_shows_weekly = [
    'no_show' => [],
    'week' => []
  ];
  $cancelled_weekly = [
    'cancelled' => [],
    'week' => []
  ];
  $attended_weekly = [
    'attended' => [],
    'week' => []
  ];

  foreach($result as $r) {
    $start_time = new DateTime($r['start_time']);
    if($r['is_no_show'] == 0 && $r['is_cancelled'] == 0) {
        array_push($attended_weekly['attended'], 1);
        array_push($attended_weekly['week'], date_format($start_time, "W"));
    }
    else {
      array_push($attended_weekly['attended'], 0);
      array_push($attended_weekly['week'], date_format($start_time, "W"));
    }
    array_push($no_shows_weekly['no_show'], $r['is_no_show']);
    array_push($no_shows_weekly['week'], date_format($start_time, "W"));
    array_push($cancelled_weekly['cancelled'], $r['is_cancelled']);
    array_push($cancelled_weekly['week'], date_format($start_time, "W"));
  }
  echo json_encode(array(
       'success'=> 1,
       'msg'=>
         array(
           'No Shows' => $no_shows_weekly,
           'Cancellations' => $cancelled_weekly,
           'Attendend' => $attended_weekly
         )
    ));
在这段时间里,我无法进行任何计数,我只是提取数据,并将数据分成相应的数组

我想将数据拉入如下内容:

Week 50: {No_Shows: 10, Cancelled: 5, Attended: 25} 
Week 52: {No_Shows: 10, Cancelled: 5, Attended: 25} 
一般数据库结构:

+------------+-----------+-----------+
| start_time |  no_shows | cancelled | 
+------------+-----------+-----------+
| 2019-12-20 |     1     |     0     |   
| 2019-12-21 |     0     |     0     |  
| 2019-12-22 |     0     |     1     |  
我也尝试在MySQL中这样做:

    SELECT
    WEEKOFYEAR('start_time') AS weekno,
    SUM('is_no_show' = 1) AS no_shows,
    SUM('is_cancelled' = 1) AS cancelled
FROM
    myTable
WHERE
    (
        `start_time` > '2019-12-01' AND `start_time` < '2019-12-07'
    ) AND category LIKE 'Continued Probation'
GROUP BY
    weekno
选择
WEEKOFYEAR(“开始时间”)作为weekno,
SUM('is_no_show'=1)作为no_show,
金额('is_cancelled'=1)已取消
从…起
我的桌子
哪里
(
`开始时间“>'2019-12-01”和“开始时间”<'2019-12-07”
)以及“继续试用”之类的类别
分组
威克诺

但是,这个语句对我来说返回Null。任何建议都将不胜感激!谢谢

单引号用于字符串(和日期文字),而不是字段标识符;对于您使用的
`
。在WHERE条件中使用了正确的表达式,但在SELECT表达式中没有使用。另外,
就像没有通配符的
相当于
=
@uuerdo哇这解决了所有的问题lol。为了得到总参与人数,虽然可以得到总记录,然后减去(没有显示+取消)?你提供的有限数据很难判断,但是如果开始时间是某种形式,正在参加的活动的标识符,并对每个。。。预订(?)和
no_shows
cancelled
基本上是每个可能的与会者的标志,然后记录计数-no shows和cancelled sounds之和。