2009-12-18 16 views
11

Voglio scoprire quante righe ci sono in una tabella. Il database che sto usando è un database MySQL. Ho già una classe Db_Table che sto utilizzando per chiamate come fetchAll(). Ma non ho bisogno di informazioni dal tavolo, solo il conteggio delle righe. Come posso ottenere un conteggio di tutte le righe nella tabella senza chiamare fetchAll()?Zend_Db: come ottenere il numero di righe da una tabella?

risposta

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

+1 per fetchOne invece di fetchRow –

3

Si potrebbe fare un

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

Conteggio righe con fetchAll considerato dannoso.

Ecco come farlo nel modo 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; 
capacità
+0

Perché dite "Il conteggio delle righe con fetchAll è considerato dannoso"? – Andrew

+3

Beh, stai caricando l'intero tavolo nella memoria ... –

2

Add conteggio alla Zend_Db oggetto Per contare tutte le righe della tabella

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

Non funzionerebbe con il filtraggio - guarda la mia risposta ... –

+0

Continua a leggere, la domanda non riguardava il filtraggio! –

+0

Ah. Scusa :(Se modifichi la risposta (singolo carattere lo farò) sarei in grado di ripristinare la downvote ... :) –

4

corretta Zend-modo è quello di utilizzare Zend_Db_Select così:

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

Ecco come è stato fatto in Zend_Paginator. Altra opzione è quella di aggiungere SQL_CALC_FOUND_ROWS prima del tuo elenco di colonne e quindi ottenere il numero di righe trovate con questa query:

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

che cos'è $ table? –

+0

è istanza Zend_Db_Table. Oppure può essere anche Zend_Db_Adapter. Il metodo è in entrambi. Restituisce Zend_Db_Table_Rowset per DbTable e array per Adapter ... –

+0

Questa risposta è particolarmente utile se devi contare i risultati di una query forzata che hai perso il set di risultati originale per ... +1 – nzn

2

Sono un po 'minimalista:

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

Può essere utilizzato genericamente su tutti tabelle.

Problemi correlati