一.问题描述:数据库存储了每天发布的文章的信息,但是由于不是每天都有文章发布,可能有一天就没有数据。
需求就是把每一天的文章输出数量都显示,当天无输出则为0。
解决办法:大致思路是想使用left join,最好是得到一个30天日期的表格数据
之前想出了三种方案:
1.使用mysql数据库 函数来解决, 但是发现返回值不能为一个表格
2.使用Java编写,对数据库返回的List<Map>进行操作,但是这样写出来的东西过于复杂,循环太多
3.建立一张完全存日期的表格,再用存储过程插入前后一年的日期数据
实现方法如下:
1.建表语句省略
2.存储过程代码
//存储过程
DROP PROCEDURE if exists test_insert ;
DELIMITER ;;
CREATE PROCEDURE test_insert ()
BEGIN
DECLARE i INT DEFAULT -365;
WHILE i<365
DO
insert into test values (DATE_SUB(NOW(),INTERVAL i DAY));
SET i=i+1;
END WHILE ;
commit;
END;;
CALL test_insert();
3.sql语句
select a.日期,IFNULL(b.数量, 0) 数量 from (select DATE_FORMAT(mdate,'%y-%m-%d') 日期 from test where mdate>DATE_SUB(NOW(),INTERVAL 30 DAY) and mdate<NOW() order by 1) a
left join (select DATE_FORMAT(addtime,'%y-%m-%d') 日期,count(1) 数量 from cp_cms_content where addtime>DATE_SUB(NOW(),INTERVAL 30 DAY) GROUP BY 1 ORDER BY 1) b on a.日期=b.日期
二.问题描述:统计每个月的文章输出量
直接上代码,我觉得这个应该大家也会用的到:
//查询每个月的数量统计
select DATE_FORMAT(addtime,'%Y-%m') as 月份,COUNT(1) as 数量 from cp_cms_content where DATE_FORMAT(addtime,'%Y')=2016 group by 月份 order by 月份