我遇到问题,我需要在执行原始查询之前执行COUNT查询,以满足分页的需要,因此我将知道我将从原始查询中收到的预测记录数。/ p>
我的原始查询如下:
$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匹配表事务
答案 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);
这更容易。