我的项目要求很少:
我想要fetch all the records of the previous month from the database.
structure of the table
如下:
id clientid task date
1 1 1 01.Feb.2011 12:13
2 1 1 05.Feb.2011 15:22
3 1 0 09.Feb.2011 14:17
4 2 1 11.Feb.2011 19:53
5 1 0 19.Feb.2011 14:27
6 2 1 23.Feb.2011 09:53
7 1 0 01.Mar.2011 14:17
8 2 1 01.Mar.2011 19:53
9 1 0 03.Mar.2011 14:67
10 2 1 03.Mar.2011 09:53
.....................
在此,我想fetch
records
previous month
particular client
Zend Framework.
client 1
1,2,3 and 5.
例如:如果我想要{{1}}条记录,那么它应该向我显示记录:{{1}}
请建议一些代码或链接,以帮助我......
提前致谢
答案 0 :(得分:3)
假设日期列是DateTime column,我会尝试使用类似
的内容$select->from('tablename')
->where('MONTH(date) = ?', date('n', strtotime('last month')))
->where('YEAR(date) = ?', date('Y'))
->where('clientid = ?', $clientId)
;
注意:未经测试且可能需要调整,但这是一般方向
这将从tablename中获取所有行,其中月份是最后一个月,而year是当前年份,而clientId是选定的clientId。所以查询应该变成类似
的东西SELECT * from tablename
WHERE MONTH(date) = 2
AND YEAR(date) = 2011
AND clientid = 1;
您还可以将上个月和当前年度的计算直接放入查询中,例如:使用appropriate MySql functions代替用PHP计算它们。这可能更可靠。
答案 1 :(得分:2)
您可以使用PHP获取当月的第一天:
$this_month = mktime(0, 0, 0, date("m"), 1, date("Y"));
$previous_month = mktime(0, 0, 0, date("m")-1, 1, date("Y"));
然后,您只需将此日期作为查询的参数传递:
SELECT * FROM mytable WHERE date >= ? AND date < ? and client_id = 1
你在哪里更换?分别由'$ previous_month'和'$ this_month'
组成答案 2 :(得分:1)
如果您的date
字段属于Datetime
类型,则可以使用MySQL中的日期特定功能来执行此操作。使用数据库函数时,只需使用Zend_Db_Expr
构造语句。
答案 3 :(得分:1)
我的Zend_Db技能有点生疏,但我认为以下是你想要的:
$select->from('tablename')
->where(new Zend_Db_Expr('MONTH(`date`) = MONTH(DATE_SUB(NOW(), INTERVAL 1 MONTH))'))
->where(new Zend_Db_Expr('YEAR(`date`) = IF(MONTH(NOW()) = 1, YEAR(NOW()) - 1, YEAR(NOW()))'))
->where('clientid = ?', $clientId)
答案 4 :(得分:0)
您可以使用SQL DATE_SUB和INTERVAL函数,如:
select * from table where `date` >= DATE_SUB(NOW(), INTERVAL 1 month)
在ZF1中,您可以编写如下内容:
$select->from('tablename')
->where( 'date >= DATE_SUB(NOW(), INTERVAL 1 month)');