Zend select()计数

时间:2014-02-06 14:56:57

标签: zend-framework count

我遇到问题,我需要在执行原始查询之前执行COUNT查询,以满足分页的需要,因此我将知道我将从原始查询中收到的预测记录数。

我的原始查询如下:

  $select = $this->getAdapter()->select()
            ->from(array('u' => 'user'), array('id', 'name', 'addedDate' => 'MAX(t.added_date)'))
            ->joinLeft(array('t' => 'transaction'), 'u.id = t.user_id', array('added_date'))
            ->group('u.id')
            ->order('COALESCE(MAX(t.added_date), "9999-00-00 00:00:00") ASC')

在count查询中我不会获取字段,我只需要知道DB将返回多少条记录。任何想法?

我试图将' =' =>' COUNT(u.id)'在from子句中,但它没有计算所有记录,而是从主表的每个记录的连接表中的原始拟合记录数,所以在count键下的结果中,我看到user.id 1有示例3匹配表事务

1 个答案:

答案 0 :(得分:4)

您可以使用两个Zend_Db_Select对象:

$select = $this->getAdapter()->select()
        ->from(array('u' => 'user'), array('id', 'name', 'addedDate' => 'MAX(t.added_date)'))
        ->joinLeft(array('t' => 'transaction'), 'u.id = t.user_id', array('added_date'))
        ->group('u.id')
        ->order('COALESCE(MAX(t.added_date), "9999-00-00 00:00:00") ASC');

$countRowsSelect = $this->getAdapter()->select()
        ->setIntegrityCheck(false)
        ->from(array('cnt' => $select), array('row_count' => 'COUNT(*)'));

$countRow = $countRows->query()->fetchAll();
echo 'There are ' . $countRow[0]['row_count'] . 'rows!';

它等于SQL查询:

SELECT COUNT(*) AS row_count FROM
( -- your query with GROUP BY here -- ) cnt

但是,当你有一个完整的Zend_Db_Select时,只需使用Zend_Paginator:

$paginator = new Zend_Paginator(new Zend_Paginator_Adapter_DbSelect($select);

这更容易。