2009-08-03 21 views
56

Sono molto nuovo a CodeIgniter e Active Record in particolare, so come farlo bene in SQL normale ma sto cercando di imparare.CodeIgniter Active Record - Ottieni il numero di righe restituite

Come selezionare alcuni dati da una delle mie tabelle e quindi contare quante righe vengono restituite utilizzando la classe di record attivo CodeIgniters?

Grazie, Tom.

risposta

107

Dai un'occhiata alla funzioni di risultato here:

$this->db->from('yourtable'); 
[... more active record code ...] 
$query = $this->db->get(); 
$rowcount = $query->num_rows(); 
+0

stavo sbattere la testa per ore, non riuscivo a ricordare il nome della funzione ... e non è facile trovare nella documentazione ufficiale sia. Ho usato 'print_r' sull'oggetto risultante dal metodo' get_where' per indovinare il nome della funzione! =) – aL3xa

+0

@Residuum puoi aiutarmi a risolvere questo [query-num-rows-not-return-correct-number-of-row-when-result-is-not-empty] (https://stackoverflow.com/ domande/45397106/query-num-righe-non-ritorno-corretto-numero-di-riga-quando-risultato-non-vuoto) –

35

E, se si desidera ottenere un conteggio di tutte le righe di una tabella

$table_row_count = $this->db->count_all('table_name'); 
+0

Grazie mille. –

8

Devo solo leggere il figlio docs !

$query->num_rows(); 
15

Se avete solo bisogno il numero di righe in una query e non hanno bisogno i dati di riga effettivi, utilizzare count_all_results

echo $this->db 
     ->where('active',1) 
     ->count_all_results('table_name'); 
29

Questo va a voi il modello:

public function count_news_by_category($cat) 
{ 
    return $this->db 
     ->where('category', $cat) 
     ->where('is_enabled', 1) 
     ->count_all_results('news'); 
} 

È un esempio del mio attuale progetto.

Secondo benchmarking questa query funziona più veloce se si effettuare le seguenti operazioni:

$this->db->select('*')->from('news')->where(...); 
$q = $this->db->get(); 
return $q->num_rows(); 
2

Questa è anche una funzione molto utile se siete alla ricerca di un righe o dati con cui condizione influenzato

function num_rows($table) 
    { 
     return $this->db->affected_rows($table); 
    } 
3

È possibile farlo in due modi diversi:

1. $this->db->query(); //execute the query 
    $query = $this->db->get() // get query result 
    $count = $query->num_rows() //get current query record. 

    2. $this->db->query(); //execute the query 
     $query = $this->db->get() // get query result 
     $count = count($query->results()) 
      or count($query->row_array()) //get current query record. 
2
$this->db->select('count(id) as rows'); 
$this->db->from('table_name'); 
$this->db->where('active',1); 
$query = $this->db->get(); 
foreach($query->result() as $r) 
{ 
    return $r->rows; 
} 
+0

Ciò causa l'emissione di una query 'SELECT' che include una chiamata alla funzione SQL' COUNT() '. La risposta accettata dovrebbe invece essere presa poiché impedisce ciò chiamando invece '$ query-> num_rows()'. Ad esempio, 'num_rows()' del driver mysqli restituisce il risultato della funzione PHP 'mysqli_num_rows()' per l'ultimo ID query. Nota: 'Non tutti i driver di database hanno un modo nativo per ottenere il numero totale di righe per un set di risultati. Quando questo è il caso, tutti i dati sono prefetch e count() viene chiamato manualmente sull'array risultante per ottenere lo stesso risultato. (Dalla documentazione). – Roland

+0

CI3: https://www.codeigniter.com/userguide3/database/results.html#result-helper-methods – Roland

0
function getCount(){ 
    return $this->db->get('table_name')->num_rows(); 
} 
Problemi correlati