如何计算Zend Framework 2中的行数

时间:2012-11-25 02:56:41

标签: php zend-framework2

我需要计算MySql查询的结果行。在这里,我将TableGateway课程扩展到了我的班级,这是我的代码。

public function get_num_of_rows(){
    $sql = 'SELECT count(q_no) FROM questions';

    //code ????????????????
    $result = $this->select();

    return $result;
}

那我如何执行SELECT count(q_no) FROM questions

4 个答案:

答案 0 :(得分:10)

如果您的表有大量记录,如果您使用

,可能会出现内存错误
$result->count(); 

相反使用它,你可以避免相同的

$select->from('TABLE_NAME')->columns(array('COUNT'=>new \Zend\Db\Sql\Expression('COUNT(*)')));

答案 1 :(得分:5)

没有必要编写自己的SQL查询。当您执行$ this-> select()时,您将获得Zend \ Db \ ResultSet \ ResultSet的实例。 ResultSet有方法计数。

$result = $this->select();
return $result->count(); 

但不要忘记将'options' => array('buffer_results' => true)添加到数据库适配器。

<强>更新

这是我曾经写过的最愚蠢的事情。始终从资源返回仅需要数据。在这里你只需要1个标量。所以https://stackoverflow.com/a/13810175/1353837是正确的。

答案 2 :(得分:0)

对于ZF-2,请尝试以下示例代码:

 <?php
//var/www/html/zend_app/module/Api/src/Api/Model/ApiTable.php
namespace Api\Model;

use Zend\Db\TableGateway\AbstractTableGateway;
use Zend\Db\Adapter\Adapter;
use Zend\Db\ResultSet\ResultSet;
use Zend\Db\Sql\Select;
use Zend\Db\Sql\Sql;
use Zend\Db\Sql\Where;
use Zend\Db\Sql\Expression;

class ApiTable extends AbstractTableGateway {



    public function __construct(Adapter $adapter) {
        $this->adapter = $adapter;
        $this->resultSetPrototype = new ResultSet();
        $this->resultSetPrototype->setArrayObjectPrototype(new Api());
        $this->initialize();
    }




    public function countTableData($from, $whereData = NULL) {
        $sql = new Sql($this->adapter);

        $select = $sql->select();
        $select->from($from);

        if($whereData)
        {
            $select->where($whereData);
        }
        $statement = $sql->prepareStatementForSqlObject($select);
        $results = $statement->execute();
        $resultSet = new ResultSet;
        $resultSet->initialize($results);
        $resultSet->buffer();
        return $resultSet->count();

    }


}

HTH。

答案 3 :(得分:0)

或者这个:

$select->join('reports', 'user.user_id = reports.ruser_id', array('sdays' => new \Zend\Db\Sql\Expression('COUNT(rhours)')),$select::JOIN_INNER);

$select->group('ruser_id');