在MySQL SELECT语句中插入空行

在MySQL SELECT语句中插入空行,mysql,datetime,Mysql,Datetime,我有这样一个问题: SELECT COUNT(id), MONTH(date), YEAR(date) FROM activity GROUP BY YEAR(date) DESC, MONTH(date) DESC ORDER BY YEAR(date) DESC, MONTH(date) DESC 按月份/日期记录的订单和组。如果某个月没有记录,有没有办法插入一个空行 因此,与此相反: c | M% | Y% 4 | 01 | 2014 # 4 records for Jan

我有这样一个问题:

SELECT COUNT(id), MONTH(date), YEAR(date)
FROM activity
GROUP BY YEAR(date) DESC, MONTH(date) DESC
ORDER BY YEAR(date) DESC, MONTH(date) DESC
按月份/日期记录的订单和组。如果某个月没有记录,有没有办法插入一个空行

因此,与此相反:

c | M% |  Y%

4 | 01 | 2014     # 4 records for Jan 2014
3 | 11 | 2013     # 3 records for Nov 2013
7 | 10 | 2013     # 7 records for Oct 2013
我想插入2013年1月计数为0时找不到记录的月份,这样我就可以清楚地看到每月的活动

c | M% |  Y%

4 | 01 | 2014
0 | 12 | 2013    # <<<< no records for Dec 2013, but I still want it in array
3 | 11 | 2013
7 | 10 | 2013

与其他人不同的是,您可以利用SQL变量在MySQL查询中进行组合。我的内部查询创建的基准日期比现在提前一个月。它被连接到活动表,只是为了获得要使用的行。只需将SQL变量设置为比上一个月的结果少一个月,即可创建该列。在这个例子中,我的限制是6个月,所以它只能返回6个月的数据,但你可以将其更改为你关心的数量。。。只要活动表中有那么多记录,就可以是任何表,只要它有您想要创建这些占位符记录的数量。这将创建一个 我所拥有的是DynamicCalendar。然后,我以此为基础,以月/年为单位对活动进行左连接

SELECT
      MONTH( DynamicCalendar.GrpDate ) as Mth,
      YEAR(  DynamicCalendar.GrpDate ) as Yr,
      COUNT(activity.id) as Entries
   from 
      ( select
              @BaseDate := date(date_sub(@BaseDate, interval 1 month)) as GrpDate
           from 
              ( select @BaseDate := date_add(Now(), interval 1 month)) sqlvars,
              Activity,
           limit
             6 ) DynamicCalendar
      LEFT JOIN Activity
         ON MONTH( DynamicCalendar.GrpDate ) = MONTH( Activity.Date )
         AND YEAR( DynamicCalendar.GrpDate ) = YEAR( Activity.Date )
   group by
      MONTH( DynamicCalendar.GrpDate ) as Mth,
      YEAR(  DynamicCalendar.GrpDate ) as Yr
   order by
      YEAR(  DynamicCalendar.GrpDate ) DESC,
      MONTH( DynamicCalendar.GrpDate )

不,不是直接的。SQL不能凭空生成行,尤其是mysql。您必须有一个临时表,其中包含您可以加入的所有日期。表中不存在但在临时表中存在的任何行在相应字段中都会有空值。因此,最好在PHP中这样做?是的,通常更好。顺便说一句,按描述分组并不意味着什么!啊,是的,你是对的,我从我首先编写的ORDER语句复制粘贴的GROUP语句。酷,我将通过PHP循环运行它。谢谢