在Zend DB Table Select中使用SQL_CALC_FOUND_ROWS获取总行数

3

是否有一种方法可以在Zend db select中获取总行数,就像在常规mysql查询中使用SQL_CALC_FOUND_ROWS一样。除了运行没有限制子句的相同查询之外,我还没有找到类似的功能。

3个回答

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

你还可以尝试用 COUNT(*)替换所有的cols,然后再运行查询语句第二次。这可能会更加高效(即使这看起来有些违反常理)。在我的应用程序中就是这种情况。

你可以像这样实现:

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

2

因为没有其他更好的建议,我建议查看ZF论坛上这篇帖子。它是从2008年开始的,ZF可能已经升级。


0

如果需要行内的数据,请使用此方法

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

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

如果您只需要行的总数,请使用以下代码:
$count = $db->select()->from('foo','COUNT(*)')->query()->fetchColumn();

虽然它可以工作,但这非常低效,特别是如果您正在使用MySQL。使用calc_rows可以节省大量检索数据以找出有多少条目,而没有分页限制。为了使其与数据库无关,您还可以实现一个单独的COUNT查询。 - Kees Schepers
高效的方法添加了,我认为需要知道总行数。 - Mr Coder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接