Dans un scénario, je dois connaître le nombre de jeux d'enregistrements renvoyés par une requête, ce qui peut être effectué dans codeigniter avec $query->num_rows()
ou $this->db->count_all_results()
. Lequel est le meilleur et quelle est la différence entre ces deux?
Avec num_rows()
, vous commencez par exécuter la requête, puis vous pouvez vérifier le nombre de lignes que vous avez obtenues. count_all_results()
, par contre, ne vous donne que le nombre de lignes que votre requête produira, mais ne vous donne pas le résultat réel.
// num rows example
$this->db->select('*');
$this->db->where('whatever');
$query = $this->db->get('table');
$num = $query->num_rows();
// here you can do something with $query
// count all example
$this->db->where('whatever');
$num = $this->db->count_all_results('table');
// here you only have $num, no $query
$this->db->count_all_results
fait partie d'un Active Record query (préparation de la requête, pour ne renvoyer que le nombre, pas les résultats réels).
$query->num_rows()
est exécuté sur un objet resultset (après avoir renvoyé les résultats de la base de données).
Which one is better and what is the difference between these two
C'est presque impossible pour moi, quelqu'un veut juste obtenir le nombre d'enregistrements sans toucher à nouveau ou effectuer une autre requête qui implique la même ressource. En outre, après tout, la mémoire utilisée par ces deux fonctions est identique, car avec count_all_result
vous effectuez toujours get
(en termes de CI AR), je vous recommande donc d'utiliser l'autre (ou d'utiliser count () à la place), ce qui vous a rendu réutilisable avantages.
Il existe deux façons de compter le nombre total d’enregistrements renvoyés par la requête ..__
$query = $this->db->query('select blah blah');
return $query->num_rows();
Cela retournera le nombre de lignes de la requête.
Seconde
return $this->db->count_all_results('select blah blah');
Tout simplement count_all_results nécessitera de réexécuter la requête.
Nous pouvons aussi utiliser
return $this->db->count_all('table_name');
ou
$this->db->from('table_name');
return $this->db->count_all_result();
ou
return $this->db->count_all_result('table_name');
ou
$query = $this->db->query('select * from tab');
return $query->num_rows();
Simplement comme ci-dessous;
$this->db->get('table_name')->num_rows();
Cela va obtenir le nombre de lignes/enregistrements. Cependant, vous pouvez également utiliser les paramètres de recherche.
$this->db->select('col1','col2')->where('col'=>'crieterion')->get('table_name')->num_rows();
Cependant, il convient de noter que vous verrez des erreurs graves si vous appliquez comme ci-dessous;
$this->db->get('table_name')->result()->num_rows();
$sql = "select count(*) as row from login WHERE firstname = '" . $username . "' AND password = '" . $password . "'";
$query = $this->db->query($sql);
print_r($query);exit;
if ($query->num_rows() == 1) {
return true;
} else {
return false;
}
Nombre total de résultats
$this->db->count_all_results('table name');