我需要计算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
?
答案 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');