【问题标题】:Getting total number of rows using SQL_CALC_FOUND_ROWS in Zend DB Table Select在 Zend DB Table Select 中使用 SQL_CALC_FOUND_ROWS 获取总行数
【发布时间】:2011-04-29 12:32:41
【问题描述】:

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

【问题讨论】:

    标签: php sql mysql zend-framework


    【解决方案1】:
    $db->select()
       ->from($tableName, array(
           new Zend_Db_Expr('SQL_CALC_FOUND_ROWS id'), 
           'name', 
           'price'
       ));
    

    您也可以尝试将所有列替换为 COUNT(*) 并第二次运行查询。它实际上可能更有效(即使它违反直觉)。我的应用程序就是这种情况。

    你可以这样做:

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

    【讨论】:

      【解决方案2】:

      因为没有其他人可以提供更好的东西,我建议在 ZF 论坛上查看this post。从 2008 年开始,ZF 可能已经升级了。

      【讨论】:

        【解决方案3】:

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

           $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 查询。
        • 虽然需要总行数,但还是添加了有效的方法
        猜你喜欢
        • 2010-09-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多