我有一个查询按日期对按行分组的行进行求和。基本上,它计算一天中的会员申请数量,并逐日打印出结果。当然,如果一天没有应用程序,它就不会显示该行(例如15日和17日以下没有应用程序......
Date | Applications
-----------------------------------
12/01/2010 | 44
13/01/2010 | 73
14/01/2010 | 66
16/01/2010 | 102
18/01/2010 | 12
19/01/2010 | 22
我需要它来打印日期和0没有应用程序的天数,因此不会跳过任何日期。知道如何做到这一点。我想在一年中的每一天加入一张桌子,但这似乎有点过分
查询在
下面SELECT
application_date AS Date,
COUNT(*) AS Applications
FROM members
GROUP BY ap_date
答案 0 :(得分:1)
这与another question on SO非常相似。普遍的共识似乎是:
最佳选择是#1 - 它是最不易复杂的,应该具有最低的开销。
答案 1 :(得分:0)
选择相关日期范围。然后遍历日期范围,查看当前行是否匹配。如果没有则输出0.如果是,则输出适当的数字并前进到下一行。
答案 2 :(得分:0)
我会创建一个PHP数组,数组索引是一个字符串,日期,我更喜欢这种格式YYYY-MM-DD,我会做这样的事情(注意键的日期格式很重要)
// how far in the past to go
$days_in_the_past = 365;
// default to today, unix timestamp file
$start_day = time();
// the array that contains all out dates
$dates = array();
// sec * min * hours
$secs_in_a_day = 60 * 60 * 24;
// note we're going backwards here
for ( $i=0; $i <= $days_in_the_past; $i++ )
{
$key = date('Y-M-D', ($start_day - ($secs_in_a_day * $i)));
// this sets the format of 2010-01-21 as the key
$dates[$key] = "";
}
$query = 'SELECT date, app FROM table';
$result = mysql_query($query);
while ( $row = mysql_fetch_assoc($result) )
{
$key = date('Y-M-D', strtotime($row['Date']));
$dates[] = $row['Applications'];
}
如果您想按顺序排列日期,只需对数组进行排序。
答案 3 :(得分:0)
为了列出一年中的所有日期而创建一个表并不过分;它被称为helper table,可以使这个查询(以及很多类似的查询)非常容易。