2009-08-03 7 views
56

Ich bin sehr neu zu CodeIgniter und Active Record insbesondere, ich weiß, wie man dies gut in normalen SQL, aber ich versuche zu lernen.CodeIgniter Active Record - Get Anzahl der zurückgegebenen Zeilen

Wie kann ich einige Daten aus einer meiner Tabellen auswählen und dann zählen, wie viele Zeilen mit der CodeIgniters Active Record-Klasse zurückgegeben werden?

Danke, Tom.

Antwort

107

Werfen Sie einen Blick auf die Ergebnisfunktionen here:

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

Ich schlug mir stundenlang den Kopf, ich konnte mich nicht an den Namen der Funktion erinnern ... und es ist auch nicht leicht, sie in der offiziellen Dokumentation zu finden. Ich habe 'print_r' für ein Objekt verwendet, das von' get_where' stammt, um den Namen der Funktion zu erraten! =) – aL3xa

+0

@Residuum können Sie mir helfen, dies zu lösen [Abfrage-Nummer-Zeilen-nicht-Rückgabe-richtige-Nummer-der-Zeile-wenn-Ergebnis-ist-nicht-leer] (https://stackoverflow.com/ questions/45397106/query-num-rows-nicht-zurück-richtig-nummer-von-row-wenn-ergebnis-ist-nicht-leer) –

35

AND, wenn Sie nur

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

Vielen Dank. –

8

musst nur lesen Sie die docs Sohn eine Zählung aller Zeilen in einer Tabelle erhalten möchten !

$query->num_rows(); 
15

Wenn Sie nur die Anzahl der Zeilen in einer Abfrage und müssen nicht die tatsächlichen Zeilendaten verwenden count_all_results

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

Dies geht Ihnen Modell:

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

Es ist ein Beispiel aus meinem aktuellen Projekt.

Nach benchmarking diese Abfrage arbeitet schneller, als wenn Sie wie folgt vorgehen:

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

Dies ist auch eine sehr nützliche Funktion, wenn Sie für einen Zeilen oder Daten suchen, um mit dem Zustand betroffen

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

Sie können dies auf zwei verschiedene Arten:

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

Dies bewirkt, dass eine SELECT-Abfrage ausgegeben wird, die einen COUNT() - SQL-Funktionsaufruf enthält. Die akzeptierte Antwort sollte stattdessen verwendet werden, da dies verhindert wird, indem stattdessen $ query-> num_rows() 'aufgerufen wird. Zum Beispiel gibt 'num_rows()' von mysqli driver das Ergebnis der 'mysqli_num_rows()' PHP-Funktion für die letzte Abfrage-ID zurück. Bitte beachten Sie: 'Nicht alle Datenbanktreiber haben eine native Möglichkeit, die Gesamtzahl der Zeilen für eine Ergebnismenge zu ermitteln. Wenn dies der Fall ist, werden alle Daten vorabgerufen und count() wird manuell für das resultierende Array aufgerufen, um das gleiche Ergebnis zu erzielen. "(Aus der Dokumentation). – 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(); 
} 
Verwandte Themen