我有一个带有行时间戳和行值的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.
我希望有人能给我一个提示。
答案 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