在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循环运行它。谢谢