Sql Query选择和if语句

时间:2014-08-13 08:18:40

标签: php mysql zend-framework

我试图实现一个查询,其中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);
        }

2 个答案:

答案 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');