2009-12-18 20 views
11

Quiero saber cuántas filas hay en una tabla. La base de datos que estoy usando es una base de datos MySQL. Ya tengo una clase Db_Table que estoy usando para llamadas como fetchAll(). Pero no necesito ninguna información de la tabla, solo el recuento de filas. ¿Cómo puedo obtener un recuento de todas las filas de la tabla sin llamar al fetchAll()?Zend_Db: ¿Cómo obtener el número de filas de una tabla?

Respuesta

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

+1 para fetchOne en lugar de fetchRow –

3

se podría hacer

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

filas contando con fetchAll considerada perjudicial.

continuación se explica cómo hacerlo de la manera Zend_Db_Select:

$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

¿Por qué dices "contar filas con fetchAll se considera perjudicial"? – Andrew

+3

Bueno, está cargando toda su tabla en la memoria ... –

2

agregar la capacidad de conteo a su objeto Zend_Db Para contar todas las filas de la tabla

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

No funcionaría con el filtrado - vea mi respuesta ... –

+0

Lea de nuevo, ¡la pregunta no era sobre el filtrado! –

+0

Ah. Lo siento :(Si editas tu respuesta (solo carácter lo hará), podré revertir el downvote ... :) –

4

adecuada Zend-forma es utilizar Zend_Db_Select como este:

$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); 

Así es como se hace en Zend_Paginator. Otra opción es añadir SQL_CALC_FOUND_ROWS antes de que su lista de columnas y luego obtener el número de filas que se encuentran con esta consulta:

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

¿cuánto es $ table? –

+0

es la instancia de Zend_Db_Table. O puede ser Zend_Db_Adapter también. El método está en ambos. Devuelve Zend_Db_Table_Rowset para DbTable y matriz para Adapter ... –

+0

Esta respuesta es particularmente útil si necesita contar los resultados de una consulta artificial que ha perdido el conjunto de resultados original para ... +1 – nzn

2

Soy una especie de un minimalista:

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

Puede ser utilizado de forma genérica en todos mesas.

Cuestiones relacionadas