1

我目前正在使用 Zend Framework 2 和一个带有日期范围的查询来从 MySQL 数据库中获取数据,我遇到了之前在 ZF1 中不可用的 between 子句。

但是,我看起来像这样的代码无法正常工作:

   $dateStart = '2012-12-20';
   $dateEnd = '2012-12-31';

   $sql = new Sql($_db);
   $select = $sql->select()
                ->from(array("t" => $table))
                ->columns(array("col1" => "col_as_1", "col2" => "col_as_2"));

 $select->where->between("date", $dateStart, $dateEnd);
 $stmt = $sql->prepareStatementForSqlObject($select);
 $result = $stmt->execute()->getResource()->fetchAll(\PDO::FETCH_ASSOC);

显然 between 子句不包含在内,我只能在 2012-12-30 之前得到结果,有没有办法让它包含在内?我一直在查看 ZF2 文档,但它们不是很有帮助,并且在 MySQL 查询浏览器上运行相同的查询会返回我需要的所有数据。

4

5 回答 5

3
$from_date = date('Y-m-d', strtotime($AppCleaner->from_date ));
$to_date = date('Y-m-d', strtotime($AppCleaner->to_date ));

  $select->where->between('appointment_date', $from_date . ' 00:00:00', $to_date . ' 23:59:59');

另外,使用 between 子句,如下所示:

        $sql = new Sql($this->adapter);
        $select = $sql->select();
        $select->from('app_posts');
        $select->where->NEST->between( 'id', 30,40);
        $select->group('app_posts.id');
 //     echo $select->getSqlString($this->adapter->getPlatform());
//      exit;
        $statement = $sql->prepareStatementForSqlObject($select);
        $result = $statement->execute();
        $resultSet = new ResultSet();
        $resultSet->initialize($result);
        $posts = $resultSet->buffer()->toArray();
        return $resultSet;
于 2018-04-10T14:25:26.213 回答
2

所以你可以尝试lessThanOrEqualTogreaterThanOrEqualTo.

之间似乎不提供此功能:between($identifier, $minValue, $maxValue)

如果您跟踪查询,$select->__toString()您可以将查询视为字符串。

我的电脑上没有 ZF2 但我可以想象between在 ZF2 中会输出date > '2012-12-20' AND date < '2012-12-31'.

于 2013-01-08T18:11:49.990 回答
2

注意:between在 Mysql 上使用时

date_column_name between 'startDate' AND 'endDate'

注意:您应该想在 endDate 中插入+1日期。因为当您在endDate中插入 2015-05-18 日期时,您无法获取 2015-05-18 的数据。因此您需要在endDate中加上一个日期

你可以用这个来做

$plusToDate = date('Y-m-d H:i:s', strtotime($toDate . ' + 1 day'));
于 2015-05-18T09:00:24.513 回答
1

The BETWEEN should be inclusive, are you sure there are no hours, minutes and seconds after the date, that would cause it not to select dates on 2012-12-31 since 2012-12-31 00:00:01 would technically be > 2012-12-31

于 2013-01-09T15:52:12.810 回答
0

格式必须相同,使用mysql DATE函数

$select->where->between("DATE(date)", DATE('.$dateStart.'), DATE('.$dateEnd.'));

于 2014-12-17T12:33:50.637 回答