2012-11-25 2 views
2

MySql 쿼리의 결과 행을 계산해야합니다. 여기에 나는 내 코드에 TableGateway 클래스를 확장했다.Zend Framework 2에서 행 수를 계산하는 방법

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?

답변

6

자신의 SQL 쿼리를 작성할 필요가 없습니다. $ this-> select()를 수행하면 Zend \ Db \ ResultSet \ ResultSet 인스턴스가 생깁니다. ResultSet에는 메소드 count가 있습니다.

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

하지만 당신의 DB 어댑터에 'options' => array('buffer_results' => true)를 추가해야합니다.

업데이트 :

그것은 내가 어딘가에 쓴 멍청한 일이다. 리소스에서 항상 반환되는 것은 데이터 만 필요합니다. 여기에 스칼라가 1 개만 필요합니다. 따라서 https://stackoverflow.com/a/13810175/1353837이 맞습니다. 테이블 레코드의 큰 숫자가있는 경우가 대신 이것을 사용

$result->count(); 

를 사용하는 경우

+0

감사를 : -)! – user1784592

+10

절대 모든 행을 선택하고 특정 쿼리가 일치하는 행 수가 필요하고 행 자체가 필요하지 않은 경우 계산합니다. – Xerkus

9

, 당신은 오류 메모리를 얻을 수 있습니다, 당신은 ZF-2에 대한

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

+1, 대단한 답변입니다. COUNT을 (를) 얻을 수있는 방법은 무엇입니까? – SagarPPanchal

0

를 방지 할 수 있습니다 이 샘플 코드를 시도하십시오 :

<?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.

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'); 
관련 문제