PHP / MySQL - 创建每周报告

时间:2014-01-02 23:13:22

标签: php mysql sql

我有一个带有行时间戳和行值的mysql数据库。 我想在7天内计算所有数值。

如何让PHP从db中的第一个日期开始并创建每周摘要?

我的时间格式是dd-mm-yy。

我的查询是:

$kcl = mysqli_query($db,"SELECT * FROM tick GROUP BY date ORDER BY id DESC");

我认为可以使用for循环和&计数器,我必须查询以找出第一个记录日期,收集7天,然后进行接下来的7天。所以我想在这个布局中显示结果:

WEEK 30.12.13-05.01.2014    |    RESULT OF CALC
WEEK 06.01.2014-12.01.204   |    RESULT OF CALC
etc.

我希望有人能给我一个提示。

4 个答案:

答案 0 :(得分:3)

尝试这样的事情:

"SELECT *, AVG(value) AS value_avg FROM `tick` GROUP BY WEEK(date) ORDER BY id DESC"

日期时间功能:http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html

分组:http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html

答案 1 :(得分:0)

如果这是一个持续的过程,你应该看看cron。这是一个自动化过程,它将按照设定的时间表执行脚本,您可以根据需要更改,添加等。如果您有托管,它应该在您的控制面板选项中。

http://en.wikipedia.org/wiki/Cron

不确定这是否是您想要的,但它可能是关于PHP中时间函数的正确方向的一步。

<?php
    function dates_range($date1, $date2) {
       if ($date1<$date2) {
           $dates_range[]=$date1; 
           $date1=strtotime($date1); 
           $date2=strtotime($date2); 
           while ($date1!=$date2){
               $date1=mktime(0, 0, 0, date("m", $date1), date("d", $date1)+1, date("Y", $date1)); 
               $dates_range[]=date('Y-m-d', $date1); 
           }
       }
       return $dates_range;
    }

    $date_1 = strftime('%Y-%m-%d', time());
    $date_2 = 'Search 7 days on either side';
    //then compare your MySQL data to the output or through a foreach or whichever
    echo '<pre>';
    print_r(dates_range($date_1, $date_2));
    echo '</pre>';
?>

答案 2 :(得分:0)

我有可能无效的痛苦想法,但我会尝试:

$kcl = mysqli_query($db,"SELECT * FROM  where created_dt BETWEEN curdate() - INTERVAL $var     DAY AND SYSDATE() tick GROUP BY date ORDER BY id DESC");

我想在某个地方编辑$ var为7,14,21等...

哦,男人......

答案 3 :(得分:0)

  

我认为可以使用for循环和&amp;计数器

是的,但为什么呢?除了一些非常不寻常的边缘情况外,在DBMS中进行数据选择和聚合效率要高得多。

假设您希望日期引用一周的第一天,并假设您的一周从星期一开始,那么......

SELECT CONCATENATE(DATE_FORMAT(weekstart, '%d.%m.%y')
   , '-' , DATE_FORMAT(weekstart + INTERVAL 6 DAY, '%d.%m.%y') AS week,
   total
FROM (
    SELECT DATE(yourdate - INTERVAL WEEKDAY(yourdate,1) DAY) AS weekstart,
      SUM(yourvalue) AS total
    FROM yourtable
    GROUP BY DATE(yourdate - INTERVAL WEEKDAY(yourdate,1) DAY)
) AS ilv
相关问题