第一步:手动产生一个连续的日期
CREATE TABLE dateTemp (i int);
INSERT INTO dateTemp (i) VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);
select adddate('2012-09-01', numlist.id) as `date` from
(SELECT n1.i + n10.i*10 + n100.i*100 AS id FROM dateTemp n1 cross join dateTemp as n10 cross join dateTemp as n100) as numlist
where adddate('2012-09-01', numlist.id) <= '2012-09-10';
第二步:产生一个连续的日期:起始时间发布第一条信息的时间,终止时间:这里选取当前时间
select adddate(( SELECT DATE_FORMAT(bi.release_time, '%Y-%m-%d') as publish_date
FROM bbg_information as bi where bi.release_time > 0
GROUP BY DATE_FORMAT( bi.release_time, '%Y-%m-%d' )
limit 1), numlist.id) as `date` from (SELECT n1.i + n10.i*10 + n100.i*100+n1000.i*1000 AS id FROM dateTemp n1 cross join dateTemp as n10 cross join dateTemp as n100 cross join dateTemp as n1000) as numlist where adddate(( SELECT DATE_FORMAT( bi.release_time, '%Y-%m-%d') as publish_date
FROM bbg_information as bi
GROUP BY DATE_FORMAT( bi.release_time, '%Y-%m-%d' )
limit 1), numlist.id) <= curdate()
第三步:将结果存入表格,以便联合查询
(1)先要删除原来的表,为了不重复添加数据
drop table if exists information_line_date;
(2)在建表时指定数据类型和字符集,不然会出错。
CREATE TABLE if not exists information_line_date (create_time date);
(3)添加时间数据
insert into information_line_date2 (create_time) select * from (
select adddate(( SELECT DATE_FORMAT( bi.release_time, '%Y-%m-%d') as publish_date
FROM bbg_information as bi where bi.release_time > 0
GROUP BY DATE_FORMAT( bi.release_time, '%Y-%m-%d' )
limit 1), numlist.id) as `date` from (SELECT n1.i + n10.i*10 + n100.i*100+n1000.i*1000 AS id FROM dateTemp n1 cross join dateTemp as n10 cross join dateTemp as n100 cross join dateTemp as n1000) as numlist where adddate(( SELECT DATE_FORMAT(bi.release_time , '%Y-%m-%d') as publish_date
FROM bbg_information as bi
GROUP BY DATE_FORMAT( bi.release_time, '%Y-%m-%d' )
limit 1), numlist.id) <= '2070-12-30'
) as t
第四步:第三步:联合查询,无数据补0
SELECT information_line_date2.create_time as publish_date, IF(information_num IS NULL , 0, information_num) as information_num,
IF(reviewed IS NULL , 0, reviewed) as reviewed,
IF(reviewing IS NULL , 0, reviewing) as reviewing
FROM(SELECT DATE_FORMAT( bi.release_time, '%Y-%m-%d') as publish_date , COUNT(*) as information_num , sum(bi.state=1) as reviewed ,
sum(bi.state=0) as reviewing
FROM bbg_information as bi
GROUP BY DATE_FORMAT( bi.release_time, '%Y-%m-%d' )) t
RIGHT JOIN information_line_date2 on t.publish_date = information_line_date2.create_time
where information_line_date2.create_time BETWEEN '2017-10-20' and '2017-12-01'
ORDER BY information_line_date2.create_time DESC
LIMIT 5,5
到这里就差不多结束了,可以查询一段时间内每天的信息发布数,审核数总数,未审核总数。