如何使用mysql在一个月内获取每天的记录

时间:2014-04-14 11:58:37

标签: mysql

我正在使用mysql,我要求我的报告在一个月和一个月内获得每天的注册数据(如果按月搜索)(如果基于一年搜索)。

以下是我用来获取结果的查询

查询:

SELECT 
  COUNT(tenant_id) AS registered, 
  DATE_FORMAT(created_date,'%d') AS weeks 
FROM asign_user 
WHERE DATE_FORMAT(created_date,'%m')='02' 
AND DATE_FORMAT(created_date,'%Y') = '2014' 
GROUP BY DATE_FORMAT(created_date,'%d');
-------------------------------
Day       |     Registered
-------------------------------
11                   5
12                   6
13                   1
14                   8
16                   9
25                   15

预期结果应为

-------------------------------
Day       |     Registered
-------------------------------
01                   0
02                   0
03                   0
04                   0
05                   0
06                   0
.                    .
.                    .
.                    .
.                    .
11                   5
12                   6
13                   1
14                   8
15                   0
16                   9
.                    .  
.                    .
25                   15
.                    .  
.                    .
30/31                0

3 个答案:

答案 0 :(得分:0)

我曾经创建了一个名为" all_days"的额外表格,其中包含给定时期内的所有日子(5年)。你可以使用那个与外连接,然后创建你想要的输出。我还建议你不要使用这种方法并在应用程序级别上执行此操作(这就是Strawberry所说的)。 我在报告引擎中使用了这种方法,它不允许任何应用程序级编码,所以这对我有用....但结果很慢:(

答案 1 :(得分:0)

就个人而言,我会稍微移动查询以将weeks放在首位,以便您可以使用array_shift

注意:我在基本的MySQL中编写它,因为你没有说明你是否使用mysql_或mysqli_作为连接层

$sql = <<<SQL
    SELECT 
      DATE_FORMAT(created_date,'%d') AS weeks 
      COUNT(tenant_id) AS registered, 
    FROM asign_user 
    WHERE DATE_FORMAT(created_date,'%m')='02' 
    AND DATE_FORMAT(created_date,'%Y') = '2014' 
    GROUP BY DATE_FORMAT(created_date,'%d');
SQL;
$run = mysql_query($sql);
if (mysql_num_rows($run) > 0)
{
    // Create data
    // This will give the days their registration count.
    $days = array();
    while ($day = mysql_fetch_assoc($run))
    {
        $days[array_shift($day)] = $day['registered'];
    }

    // Calculate days in the month
    $month = cal_days_in_month(CAL_GREGORIAN, 2, 2014);

    // Then loop them and print results
    for ($i = 1; $i <= $month; $i++)
    {
        if (isset($days[$i])) {
            echo "$i : " . $days[$i] . "<br />";
        }
        else {
            echo "$i : 0<br />";
        }
    }
}

上面显示的是一个月内的日子 - 每月编辑都不会太难:)

答案 2 :(得分:0)

请看这个博客, http://www.media-division.com/using-mysql-generate-daily-sales-reports-filled-gaps/

我们的想法是创建一个日历表。

你也可以使用cron job和这个sql来填充新的约会日期 INSERT INTO calendardatefield)VALUES(CURDATE())