测试的表和数据大约是这样的
DROP TABLE IF EXISTS `tt`; CREATE TABLE `tt` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `reccount` int(11) DEFAULT NULL, `dt` date DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=gbk; -- -- -- Records of tt -- -- INSERT INTO `tt` VALUES ("1", "a", "10", "2016-08-01"); INSERT INTO `tt` VALUES ("2", "a", "11", "2016-08-03"); INSERT INTO `tt` VALUES ("3", "a", "12", "2016-08-04"); INSERT INTO `tt` VALUES ("4", "b", "8", "2016-08-01"); INSERT INTO `tt` VALUES ("5", "b", "15", "2016-08-05");
期望是这样的,例如输入时间段 ,从 2016-08-01到2016-08-05,显示相似这样,
a 10 2016-08-01
a 0 2016-08-02
a 11 2016-08-03
a 12 2016-08-04
a 0 2016-08-05
b 8 2016-08-01
b 0 2016-08-02
b 0 2016-08-03
b 0 2016-08-04
b 15 2016-08-05
每个不同的name,每天有数据显示数据,没有数据也显示一条计数为0
解决方案
10
做一张时间表,格式和tt的时间字段相同,用来做为主表关联tt
时间表创建可以预计算几十年之后
时间表创建可以预计算几十年之后
10
假如时间间隔相对固定,你可以建立一个从0到N的序号表,查的时候根据开始时间和结束时间算出全部日期,再做关联查询
效率差一些,但基本上不用考虑维护表中数据(只要有足够的数据就行)
效率差一些,但基本上不用考虑维护表中数据(只要有足够的数据就行)