[英]PHP ARRAY display grouped data from the array based on date ranges
我有这个查询
$query = mysql_query ("SELECT type, count(*), date FROM tracking WHERE htcode='$htG' AND type IN ('viewed', 'shared', 'printed', 'emailed', 'used') GROUP BY type, date ORDER BY date ASC");
这段代码:
while ($result = mysql_fetch_assoc($query)){
echo $result['date'] .' / ' .$result['type'].' = ' .$result['count(*)'];
echo '<br>';
}
给我 :
2012-02-01 / viewed = 2
2012-02-03 / emailed = 1
2012-02-04 / shared = 1
2012-02-05 / viewed = 1
2012-02-07 / viewed = 2
2012-02-07 / shared = 3
2012-02-07 / emailed = 1
2012-02-07 / printed = 1
如何获取查询数组并提取今天,昨天和日期范围(例如最近30天)的所有(查看,共享,通过电子邮件发送,打印,使用的)?
要获取特定日期范围内的所有结果,请不要按日期分组; 而是使用WHERE子句来限制计数的日期。 否则查询非常相似。
$query = mysql_query("SELECT type, count(*) FROM tracking WHERE htcode = '$htG' AND type IN ('viewed', 'shared', 'printed', 'emailed', 'used') AND date >= '$start_date' AND date <= '$end_date' GROUP BY type");
为了清楚起见,以下只是查询本身的格式:
SELECT type, count(*)
FROM tracking
WHERE htcode = '$htG'
AND type IN ('viewed', 'shared', 'printed', 'emailed', 'used')
AND date >= '$start_date' AND date <= '$end_date'
GROUP BY type
只需确保首先设置$start_date
和$end_date
的值即可。 例如,今天您只需将它们都设置为此:
$start_date = date('Y-m-d');
$end_date = date('Y-m-d');
请注意, date('Ym-d')
只是今天的日期,格式YYYY-MM-DD
。
对于昨天,您可以将昨天的时间戳传递到date()函数中,但使用相同的格式:
$start_date = date('Y-m-d', strtotime('yesterday'));
$end_date = date('Y-m-d', strtotime('yesterday'));
在过去的30天里,您将在30天前开始,到今天结束:
$start_date = date('Y-m-d', strtotime('30 days ago'));
$end_date = date('Y-m-d');
您可以在任何开始/结束日期这样操作。 请注意,我使用的是strtotime() ,它使您可以使用许多英语短语来指定时间戳,而不必执行日期算术。
另外,由于您将多次执行查询,因此将逻辑分离为自己的函数可能很有意义:
function report_range($htG, $start_date, $end_date) {
$query = mysql_query("SELECT type, count(*) FROM tracking WHERE htcode = '$htG' AND type IN ('viewed', 'shared', 'printed', 'emailed', 'used') AND date >= '$start_date' AND date <= '$end_date' GROUP BY type");
while ($result = mysql_fetch_assoc($query)){
echo $start_date . '-' . $end_date . ' / ' . $result['type'] . ' = ' . $result['count(*)'];
echo '<br>';
}
}
然后使用以下命令运行它(在本示例中为最近30天):
report_range($htG, date('Y-m-d', strtotime('30 days ago')), date('Y-m-d'));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.