2009-12-18 10 views
11

테이블에있는 행 수를 알고 싶습니다. 내가 사용하고있는 데이터베이스는 MySQL 데이터베이스입니다. 나는 이미 fetchAll()과 같은 호출에 사용하고있는 Db_Table 클래스가 있습니다. 하지만 테이블에서 나온 정보는 필요하지 않습니다. 단지 행 수입니다. fetchAll()을 호출하지 않고 테이블의 모든 행을 어떻게 계산합니까?Zend_Db : 테이블에서 행 수를 얻는 방법?

답변

25
$count = $db->fetchOne('SELECT COUNT(*) AS count FROM yourTable'); 
+0

fetchRow 대신 fetchOne을 +1합니다. –

3

당신은 유해한 것으로 간주 fetchAll

SELECT COUNT(*) 
FROM your_table 
3
$dbo->setFetchMode(Zend_Db::FETCH_OBJ); 
$sql = 'SELECT COUNT(*) AS count FROM @table'; 
$res = $dbo->fetchAll($sql); 
// $res[0]->count contains the number of rows 
8

계산 행을 할 수 있습니다.

public function count() 
{ 
    return (int) $this->_table->getAdapter()->fetchOne(
     $this->_table->select()->from($this->_table, 'COUNT(id)') 
    ); 
} 
+0

왜 "fetchAll을 사용하여 행 계산이 위험하다고 생각하십니까?" – Andrew

+3

글쎄, 전체 테이블을 메모리에로드하는 중입니다 ... –

2

추가 카운트 기능 :

는 여기에게 Zend_Db_Select 방법을 수행하는 방법 이렇게 :

$sql = $table->select()->columns(array('name', 'email', 'status'))->where('status = 1')->order('name'); 
$data = $table->fetchAll($sql); 
$sql->reset('columns')->columns(new Zend_Db_Expr('COUNT(*)')); 
$count = $table->getAdapter()->fetchOne($sql); 

이것이 Zend_Paginator에서 어떻게 이루어 졌는지입니다. 다른 옵션은 열 목록 전에 SQL_CALC_FOUND_ROWS을 추가 한 다음이 쿼리에 발견 행의 수를 얻을 수 있습니다 :

$count = $this->getAdapter()->fetchOne('SELECT FOUND_ROWS()'); 
+0

필터링과 작동하지 않습니다 - 내 대답 참조 ... –

+0

다시 읽으십시오. 질문은 필터링에 관한 것이 아닙니다! –

+0

아. 죄송합니다 : (당신이 대답을 편집한다면 (싱글 캐릭터는 할 것입니다) 나는 downvote를 되돌릴 수있을 것입니다 ... :) –

4

적절한 젠드 - 웨이 Zend_Db_Select를 사용하는 모든 테이블 행을 계산하기 위해 당신의 Zend_DB 개체에

$habits_table = new Habits(); /* @var $habits_table Zend_Db_Table_Abstract */ 
$select = $habits_table->select(); 
$select->from($habits_table->info(Habits::NAME), 'count(*) as COUNT'); 
$result = $habits_table->fetchRow($select); 
print_r($result['COUNT']);die; 
+0

$ table이란 무엇입니까? –

+0

그것은 Zend_Db_Table 인스턴스입니다. 아니면 Zend_Db_Adapter가 될 수도 있습니다. 대도시는 둘 다에 있습니다. DbTable에 대한 Zend_Db_Table_Rowset 및 Adapter에 대한 배열을 반환합니다. –

+0

이 대답은 원래 결과 집합을 잃어버린 인위적인 쿼리의 결과를 계산해야하는 경우에 특히 유용합니다. +1 – nzn

2

나는 미니멀의 종류 해요 :

public function count() 
{ 
    $rows = $db->select()->from($db, 'count(*) as amt')->query()->fetchAll(); 
    return($rows[0]['amt']); 
} 

가 모두 일반적으로 사용할 수 있습니다 테이블.

관련 문제