2011-08-12 13 views
29

En un escenario, necesito saber el recuento del conjunto de registros que devolverá una consulta, que en codeigniter puede ser hecho por $query->num_rows() o $this->db->count_all_results(). ¿Cuál es mejor y cuál es la diferencia entre estos dos?

Respuesta

38

Con num_rows() primero realiza la consulta, y luego puede comprobar cuántas filas tiene. count_all_results(), por otro lado, solo le proporciona el número de filas que generaría su consulta, pero no le proporciona el resultado real.

// 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 
+1

derecha, supongo que voy a usar 'count_all_results', necesito contar en la paginación, gracias por tonelada :) – Kumar

+0

' count_all_results' es mucho mejor si usted está buscando desde el punto de vista de la optimización. –

5

$this->db->count_all_results es parte de un Active Record consulta (preparación de la consulta, sólo para devolver el número, no los resultados reales).

$query->num_rows() se realiza en un resultset object (después de devolver los resultados del DB).

+0

entonces me parece mejor usar 'if ($ this-> db-> count_all_results()> 0 {// do stuff}'? – Kumar

+0

Si todo lo que te importa es el número de resultados encontrados, entonces sí –

2

Which one is better and what is the difference between these two Es casi imposible para mí, alguien solo quiere obtener el número de registros sin volver a tocar o realizar otra consulta que implicó el mismo recurso. Además, la memoria utilizada por estas dos funciones es la misma, después de todo, ya que con count_all_result todavía realiza get (en términos de CI AR), así que lo recomiendo usando el otro (o use count()) que le dio reutilización beneficios.

2

Existen dos formas de contar la cantidad total de registros que devolverá la consulta. En primer lugar este

$query = $this->db->query('select blah blah'); 
return $query->num_rows(); 

Esto devolverá el número de filas de la consulta trajo.

Segunda

return $this->db->count_all_results('select blah blah'); 

Simplemente count_all_results requerirá para ejecutar la consulta de nuevo.

+0

Primero no está funcionando en mi caso ... –

1

También podemos utilizar

return count_all('table_name'); 

o

$this->db->from('table_name'); 
return $this->db->count_all_result(); 

o

$query = $this->db->query('select * from tab'); 
return $query->num_rows(); 
0

número total de resultados

$this->db->count_all_results('table name'); 
0

Simplemente como abajo;

$this->db->get('table_name')->num_rows(); 

Esto obtendrá el número de filas/registros. sin embargo, también puedes usar los parámetros de búsqueda;

$this->db->select('col1','col2')->where('col'=>'crieterion')->get('table_name')->num_rows(); 

Sin embargo, cabe señalar que se pueden ver los malos malos errores si la aplicación de la siguiente manera;

$this->db->get('table_name')->result()->num_rows(); 
Cuestiones relacionadas