Php 打印不带';表中不存在吗?

Php 打印不带';表中不存在吗?,php,mysql,group-by,Php,Mysql,Group By,我有一个按日期分组的行求和的查询。基本上,它计算每天有多少会员申请,并逐日打印结果。当然,如果一天内没有申请,它不会显示第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

我有一个按日期分组的行求和的查询。基本上,它计算每天有多少会员申请,并逐日打印结果。当然,如果一天内没有申请,它不会显示第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-它是最不复杂的,应该有最低的开销。

    我会创建一个PHP数组,数组索引将是一个字符串,日期,我更喜欢这种格式yyy-MM-DD,我会这样做(注意键的日期格式很重要)

    //过去还有多远
    过去的$days\u=365;
    //默认为今天的unix时间戳文件
    $start_day=时间();
    //包含所有过期日期的数组
    $dates=array();
    //秒*分钟*小时
    $secs_in_a_day=60*60*24;
    //注意,我们在这里向后走
    
    对于($i=0;$i只为列出一年中的所有日期创建一个表并不过分;它被称为a,可以使这个查询(以及很多类似的查询)非常简单。

    我用PHP做这件事,但不太确定如何迭代结果(例如,使用光标)如果使用不需要进一步处理的基于集合(即一次性)的查询,SQL和关系数据库通常工作得更好。
    // 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'];
    }