Мне нужно подсчитать строки результатов запроса 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
?
Нет необходимости писать собственный 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 верен.
Если ваша таблица имеет огромное количество записей, вы можете получить ошибку памяти, если используете
$result->count();
Вместо этого используйте это, вы можете избежать того же
$select->from('TABLE_NAME')->columns(array('COUNT'=>new \Zend\Db\Sql\Expression('COUNT(*)')));
Для 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(); } }
НТН.
Или это:
$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');