2010-09-08 5 views
6

Non ho molta fortuna nel rilevare quando una query di database in Codeigniter restituisce risultati zero. Ho avuto una buona lettura delle note sulla funzione di conteggio PHP ma non ne sono più saggio!Conteggio del numero di risultati restituiti da una query di database in Codeigniter

io chiamo la query/vista come segue dal controller:

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

La vista genera una tabella dei risultati per me OK, ma quando provo e intrappolare un risultato vuoto, il conteggio restituisce sempre 1:

ho provato if count(array($result)) e proprio if count($result)

Allora, qual è un buon modo per ottenere il conteggio? Sto usando Fedora 13 con PHP 5.3.3 sul mio computer portatile di sviluppo.

risposta

11

Dai un'occhiata a $query->num_rows (< - cliccabile).

+0

Sì, posso vedere come posso usare quello nel modello per restituire il numero di righe, ma poi dovrei passare il valore alla vista che sembra una lunga strada da percorrere per le cose? – Linker3000

+0

- Modifica ah, vedo che posso effettivamente usare $ result-> num_rows nella vista così come nella query originale nel modello. Lo farebbe essere considerato OK in una vista? – Linker3000

+0

Non proprio. Dovresti invece restituire un array dal tuo modello. Un elemento è il conteggio e l'altro il risultato. Di solito restituisco i risultati row_array dal modello, btw. – janosrusiczki

0

Provare if(isset($result) && count($result)) sul file di visualizzazione quindi all'interno dell'istruzione if è possibile scrivere il codice che si desidera eseguire quando gli inserimenti nel db sono più di 0 ... buona fortuna!

+0

Il problema con count ($ result) è che restituisce sempre 1, anche se ci sono, diciamo, 0, 7 o 70 risultati. – Linker3000

8

La cosa migliore da fare nel modello è la seguente:

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

Poi nel controller o vista sarebbe effettuare le seguenti operazioni:

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

Questo processo consente di rispondere in risultato basato sul tipo di risultato. Se è possibile recuperare le righe, verrà restituito un array di cui gli elementi possono essere conteggiati dalla funzione count() di PHP. Dal momento che il secondo blocco controlla se il risultato è vuoto (nota che "FALSE" è considerato vuoto) non ti imbatterai in alcun problema (es. Quando usi un ciclo foreach) e puoi specificare cosa fare nel caso in cui non ci fosse risultati.

+0

Grazie Yorick.Ho contrassegnato la risposta di Kitsched come la mia risposta accettata come prima ha suggerito num_rows, ma la tua spiegazione è ottima per chiarezza. – Linker3000

+0

Nessun problema :) –

0

Se si inserisce count($result) nell'istruzione if, quando si verifica, restituisce solo 1.

Si può provare $query->num_rows() in un modo diverso.

0

per esempio io conto di mostrare admins connessi gli utenti ans collegati

Database

gli utenti aggiungo tabella: [Stato] [int] [1]

gli utenti anche io ho : [ruolo] [varchar] [255]

Aggiornamento statut a 1 (onligne) nella convalida di login()

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

e il modello:

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

aggiornamento di stato a offline Logout() del controller

Esci: modalità

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'); 
    } 

Logout l:

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

Conte Onligne:

Il controllore:

$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); 

Il Modello:

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; 
     } 

Il Visualizzatore

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

sto dowing questo e workd per me

controller

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

Girl Utenti

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; 
     } 
    } 
}