我试图实现一个查询,其中year = bus_year,年度时间是从3月到次年(12个月)/(apr -march)我发现很难运行查询,当我选择bus_year时这是年份,例如bus_year = 2013,如果我选择1月份,我应该在2014年1月而不是2013年。
数据库数据使用Id / month / year / bus_year
我尝试了很多选择,但要么我得到2013年,要么不能选择一个月,1月,2月和3月应该总是下一年但是在2013年bus_year。这是我试过的一些问题。
//
public function get($year, $month)
{
$bus_year->$select->bus_year;
$select = $this->select();
$select->where('bus_year = ?', $year);
if($month >= 01 && $month <= 03){
$year = $year + 1;
return $this->fetchAll($select);
//
public function get($year)
{
$select = $this->select();
$select->where('bus_year = ?', $year);
return $this->fetchAll($select);
}
答案 0 :(得分:1)
我还没有完成解决方案,但我看到了两个可能的选择。首先,您可以使用UNIX_TIMESTAMP函数(假设为MySQL),然后根据两个时间戳进行查询。那你就不用担心过去一年了。
其次,您可以将月份转换为数字等效值,如果第二个月份大于12,则创建一个查询,该查询从开始年份的开始月份开始搜索,并在下一年度结束月份。我稍后会写一个解决方案并发布。
答案 1 :(得分:0)
在这种情况下,你要么必须拆分你的位置:
WHERE (bus_year = $bus_year AND month between 1 AND 3) OR (bus_year = $bus_year + 1 AND month between 3 AND 12)
或者使用MySQL日期,然后在那里传递计算:
WHERE date BETWEEN '2013-04-00 00:00:00' AND '2014-03-00 00:00:00'
(我很抱歉,我没有认识到ORM因此我刚刚指出了所需的where语句而不是整个函数。如果你指引我遵循你的ORM \ framework的约定,我也可以向你展示PHP代码。 )
就zend_db_table而言(至少,似乎这样:) :):
对于选项A:
$this->select()->where("bus_year = $bus_year AND month between 1 AND 3")->orWhere("bus_year = $bus_year + 1 AND month between 3 AND 12");
对于选项B:
$this->select()->where('date > ?', '2013-04-00')->where('date < ?', '2014-03-00');