我的数据库中有一张发票表,其中一个字段是创建日期。
用户可以输入日期范围,查询将从给定范围之间获得结果。然后,我想通过结果并显示它们,以便例如2013年1月的所有结果一起放在一个表中(pref与该表的总计),2013年的feb发票全部放在一个表中,依此类推如果要求,则为年。
我以前从来没有做过这样的事情,而且我试图找出最好的方法来做到这一点。
以前有没有人必须处理这个问题,如果有的话,这样做的最佳方法是什么?
答案 0 :(得分:0)
更新的答案因为您可能不知道第一部分...直接在您的SQL中执行困难部分而不是一些大规模的PHP循环。选择您要显示的内容并以:
结束查询WHERE invoice_date BETWEEN '$start_date' AND '$end_date' GROUP BY YEAR(invoice_date), MONTH(invoice_date)
您可以从用户用来输入日期范围的表单中通过php传递2个php变量。如果您正在使用DATETIME格式并通过datepicker获取它,请确保引用它们。那么用php开始它应该是一块蛋糕,并以你想要的方式显示它......
答案 1 :(得分:0)
我在rails项目中做了同样的事情。
首先按invoice_year invoice_month'
获取记录组然后我构建了一个哈希(或您喜欢的任何数据结构)并添加与该年份和月份相对应的数据。然后用它来构建你的表
示例:范围是2013年1月至今;
invoice_data = {'2013'=> {'jan'=> {some data},'feb'=> {some data} ...},'2014'=> {'jan'{some data}}}
您必须格式化查询数据并构建此类数据结构。
看一下sql中的extract方法。
答案 2 :(得分:0)
您应该查看SQL GROUP BY
声明(http://www.w3schools.com/sql/sql_groupby.asp)。
假设您在一个名为invoice_total的字段中有发票总计,并且您的发票日期位于名为invoice_date的字段中,则可以使用以下SQL语句:
SELECT sum(invoice_total), year, month
FROM invoices
GROUP BY YEAR(invoice_date) as year, MONTH(invoice_date) as month