我有一个MySQL数据库。我的数据库包含一个名为“created”的日期时间列的文档。我想按天分组,以便每天记录文件。但是,有些日子没有文件,因此它们不是输出的一部分。例如,如果文档不存在,我需要'2001-01-01'才能得到零计数。
我正在考虑创建一个额外的表格,其中包含我感兴趣的日期范围以及与我的表格进行外部联接。然后我可以按日期分组以获得我的结果。
有没有更好的方法来做这样的事情?
我的SQL代码:
Select date(created_at),c.text from Dates d left outer join classifier c on d.n=DATE(c.created_at)
where c.classifier="2014streamlrall"
and date(c.created_at)>='2014-03-01' and date(c.created_at)<='2014-05-01'
order by d.n;
左连接仍无效。
答案 0 :(得分:3)
在MySQL
中没有更好的方法。
它缺少一个生成任意长度结果集的方法(类似于PostgreSQL的generate_series
)和模拟这种方法(在SQL Server和Oracle中使用)所需的递归SQL。
即使在SQL Server上,填充并保留一个具有100年日期值的表(这需要多于73K的记录),与使用生成的结果集相比,在类似于您的报表上提供了更好的性能。
答案 1 :(得分:0)
使用'2001-01-01:0'创建一行是否真的存在问题?如果是这样,只需用PHP包装MySQL并用PHP控制输出。然后你只需回显(或创建一个XML条目,无论你需要什么格式),即使它是0.即使你现在对PHP一无所知,也有很多关于如何运行MySQL查询的教程在PHP和输出结果。祝你好运。