2010-09-08 21 views
6

No estoy teniendo mucha suerte de detectar cuando una consulta de base de datos en Codeigniter arroja cero resultados. He tenido una buena lectura de las notas sobre la función de conteo de PHP, pero no soy el más sabio.Contando el número de resultados devueltos por una consulta de base de datos en Codeigniter

que llame a la consulta/vista de la siguiente manera desde el controlador:

$data['result'] = $this->search_model->do_search(set_value('name')); 
$data['title'] = "Search results"; 
$this->load->view('search_view',$data); 

La vista genera una tabla de resultados para mí bien, pero cuando intento y atrapar un resultado vacío, el recuento siempre devuelve 1:

he tratado if count(array($result)) y justo if count($result)

Entonces, ¿qué es una buena manera de obtener el recuento? Estoy usando Fedora 13 con PHP 5.3.3 en mi laptop dev.

Respuesta

11

Eche un vistazo a $query->num_rows (< - clicable).

+0

Sí, puedo ver cómo podría usar eso en el modelo para devolver el número de filas, pero luego tendría que pasar el valor a la vista, lo que parece un largo camino por recorrer. – Linker3000

+0

- Edite ah, veo que realmente puedo usar $ result-> num_rows en la vista y en la consulta original en el modelo. ¿Esto se consideraría correcto en una vista? – Linker3000

+0

No realmente. En su lugar, debe devolver una matriz de su modelo. Un elemento es el recuento y el otro el resultado. Normalmente devuelvo los resultados de row_array del modelo, por cierto. – janosrusiczki

0

Pruebe if(isset($result) && count($result)) en su archivo de visualización y luego dentro de la declaración if puede escribir el código que desea ejecutar cuando las inserciones en su db son más de 0 ... ¡buena suerte!

+0

El problema con el recuento ($ result) es que siempre devuelve 1, incluso si hay, por ejemplo, 0, 7 o 70 resultados. – Linker3000

8

Lo mejor que puede hacer en su modelo es la siguiente:

$query = $this->db->something().... 
... 
... 
if ($query->num_rows() > 0) 
{ 
    return $query->result(); 
} 
else 
{ 
    return FALSE; 
} 

Luego, en su controlador o ver haría lo siguiente:

if (!empty($my_db_result)) 
{ 
    ...... 
} 

Este proceso le permite responder en el resultado basado en el tipo de resultado. Si las filas se pueden recuperar, se devolverá una matriz cuyos elementos se pueden contar mediante la función count() de PHP. Dado que el segundo bloque verifica si el resultado está vacío (tenga en cuenta que "FALSO" se trata como si estuviera vacío) no encontrará ningún problema (por ejemplo, al usar un ciclo foreach) y podrá especificar qué hacer en caso de que no haya resultados.

+0

Gracias Yorick.He marcado la respuesta de Kitsched como mi respuesta aceptada, ya que sugirió num_rows primero, pero su explicación es excelente para mayor claridad. – Linker3000

+0

No hay problema en absoluto :) –

0

Si coloca count($result) en la declaración if, cuando suceda, solo devuelve 1.

Puede intentar $query->num_rows() de una manera diferente.

0

por ejemplo Cuento para mostrar admins conectados los usuarios de la American National Standard conectados

base de datos

de usuarios agrego tabla: [estado] [int] [1]

de usuarios También he : [papel] [varchar] [255]

actualización statut a 1 (onligne) en la validación de inicio de sesión()

if($this->model_users->can_log_in($email,$pass)){ 
$update = array('status' => 1); 
$this->model_users->update_onligne($email,$update); 
redirect('main/members'); 

y el modelo:

public function update_onligne($email,$update){ 
     $this->db->where('email',$email); 
     $this->db->update('users',$update); 
     return true; 
    } 

Actualizar el estado de fuera de línea en Salir() controlador

Salir: modo de

public function logout(){ 
     $id = $this->session->userdata('id'); 
     $update = array('status' =>0); 
     $this->model_users->logout($id,$update); 
     $this->session->sess_destroy(); 
     redirect('main/login'); 
    } 

Salir l:

public function logout($id,$update){ 
     $this->db->where('id',$id); 
     $this->db->update('users', $update); 
     return; 
    } 

Count Onligne:

El controlador:

$data['admin_onligne'] = $this->model_users->count_onligne_admin(); 
$data['user_onligne'] = $this->model_users->count_onligne_users(); 
$this->load->view('template/page_left',$data); 

el modelo:

public function count_onligne_admin(){ 
      $query = $this->db->query('SELECT COUNT(status) AS enligneadmin FROM users WHERE status=1 AND role="admin"')->row_object(); 
      return $query->enligneadmin; 
     } 

public function count_onligne_users(){ 
      $query = $this->db->query('SELECT COUNT(status) AS enligneuser FROM users WHERE status=1 AND role="etudiant"')->row_object(); 
      return $query->enligneuser; 
     } 

El Visor

<span><?php echo $user_onligne ;?> User en ligne</span> 
<span><?php echo $admin_onligne ;?> Admin en ligne</span> 
0

estoy dowing esto y workd para mí

Controlador

$id = $this->session->userdata('id'); 
if($this->model_users->if_user_dont_have_email($id)){ 
.... 
} 

Modelo usuarios

public function if_user_dont_have_email($id){ 
    $query = $this->db->query("SELECT email FROM users WHERE id='$id'"); 
    if ($query->num_rows() > 0) { 
     $row = $query->row_array(); 
     if(empty($row['email'])){ 
      return true; 
     }else{ 
      return false; 
     } 
    } 
} 
Cuestiones relacionadas