对数据进行分组以按时间间隔获取报告

时间:2017-08-21 00:47:20

标签: php mysql date datatable

前一段时间我发布了一个问题,即在数据表上水平表示每个日期的数据。 见这里:datatables dates at the top and data cells going from left to right

在该线程的帮助下,我能够获取数据以显示我想要的方式。日期显示在顶部,左侧提供的服务以及与主体内2个日期参数之间的任何日期相关的所有数据。 (如果特定日期没有数据,则< td>将显示0.请参见此处: http://www.phpwin.org/s/ewbAS6

在进一步操作此代码之后,我通过证明具有开始日期和结束日期的表单以及带有以下选项的下拉列表来使搜索的日期变为动态:

  1. 每日
  2. 每周
  3. 每月
  4. 季刊
  5. 每年
  6. 这允许顶部的日期间隔变为动态。当然,所有这一切都是在循环中更改日期内第二个参数的值。

    WHILE (strtotime($date) <= strtotime($end_date)) {
        echo '<th>' . $date . '</th>';
        $date = date('Y-m-d', strtotime($date . ' +1day'));
    }
    

    参数设置为Weekly,+ 1day的值变为+ 1week,at Monthly;该值变为+ 1个月,依此类推。

    我的问题:

    当间隔设置为每日时,正确显示具有相应出勤次数的日期,但是一旦您尝试将间隔增加到+ 1周以上,数据就不会向上舍入到所示周。检查一下:

    [LINK1]每天:http://www.phpwin.org/s/ewbAS6

    [LINK2]每月:http://www.phpwin.org/s/xRo3I6

    查看数组(在LINK2上修改)

    $result[] = array('Service Name' => 'Health', 'date' => '2017-04-04', 'Attendance' => 5);
    $result[] = array('Service Name' => 'Payroll', 'date' => '2017-04-16', 'Attendance' => 5);
    $result[] = array('Service Name' => 'Saturday Youth Meeting', 'date' => '2017-04-03', 'Attendance' => 1);
    $result[] = array('Service Name' => 'Saturday Youth Meeting', 'date' => '2017-05-03', 'Attendance' => 3);
    $result[] = array('Service Name' => 'Payroll', 'date' => '2017-05-03', 'Attendance' => 2);
    $result[] = array('Service Name' => 'Payroll', 'date' => '2017-04-11', 'Attendance' => 3);
    $result[] = array('Service Name' => 'Payroll', 'date' => '2018-04-03', 'Attendance' => 10);
    

    您可以在数组中看到4月份有多个出勤条目,当月共有14个出勤人员,但在LINK2期间,间隔时间增加到一个月而不是4月份出现14(这将是所有人的总和)该特定月份的日期)显示值1。

    我的实时版本从数据库中获取数组,因此我在日期使用了YEAR(),MONTH(),WEEK()和DAY()函数,并使用了group by。查询执行我想要的方式,但在PHP端有问题。

0 个答案:

没有答案