2

我需要计算 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

4 回答 4

10

如果您的表有大量记录,则使用时可能会出现内存溢出错误

$result->count(); 

而是使用这个,你可以避免同样的

$select->from('TABLE_NAME')->columns(array('COUNT'=>new \Zend\Db\Sql\Expression('COUNT(*)')));
于 2014-01-05T18:30:33.660 回答
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是正确的。

于 2012-11-27T13:23:45.933 回答
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。

于 2016-05-10T06:24:56.363 回答
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');
于 2017-05-27T00:20:49.923 回答