3
votes

Is there a way to get the total number of rows in Zend db select like with using SQL_CALC_FOUND_ROWS in a regular mysql query. I haven't been able to find a similar functionality for this apart from running the same query without the limit clause.

3

3 Answers

11
votes
$db->select()
   ->from($tableName, array(
       new Zend_Db_Expr('SQL_CALC_FOUND_ROWS id'), 
       'name', 
       'price'
   ));

You could also try replacing all cols with COUNT(*) and running the query second time. It may actually be more efficient (even if it's counter-intuitive). This was the case for my app.

You can do it like this:

$select->reset('cols')->reset('limit')->cols('COUNT(*)'); //there is a constant for the 'cols' in Select class
$db->query($select);
2
votes

Because no one else has anything better to offer I'll suggest to see this post on a ZF forum. It's from 2008 and ZF may have been upgraded since then.

0
votes

Use this method if data inside the rows also needed

   $rows = $db->select()->from('foo')->query()->fetchAll(); 

    echo 'Total number of rows found : ' . count($rows);

if you just need the count of total number of rows then

$count = $db->select()->from('foo','COUNT(*)')->query()->fetchColumn();