2010-05-05 17 views
7

Come posso selezionare le righe da due o più tabelle?Codeigniter: selezionare da più tabelle

Sto installando campi predefiniti per una forma, e ho bisogno di valori da due tabelle ...

mio codice attuale legge:

$this->CI->db->select('*'); 
    $this->CI->db->from('user_profiles'); 
    $this->CI->db->where('user_id' , $id); 
    $user = $this->CI->db->get(); 
    $user = $user->row_array(); 
    $this->CI->validation->set_default_value($user); 

risposta

19

L'esempio nella Guida per l'utente dovrebbe spiegare questo:

$this->db->select('*'); // <-- There is never any reason to write this line! 
$this->db->from('blogs'); 
$this->db->join('comments', 'comments.id = blogs.id'); 

$query = $this->db->get(); 

// Produces: 
// SELECT * FROM blogs 
// JOIN comments ON comments.id = blogs.id 

vedere il tutto sotto Active Record pagina nella Guida per l'utente.

+0

L'esempio nella Guida per l'utente non sembra produrre un campo dalla seconda tabella. Come si fa a farlo? –

+0

* = tutto, da tutte le tabelle disponibili. Se non si sta mostrando stai facendo qualcosa di sbagliato. Inoltre, se hai due campi con lo stesso nome in diverse tabelle, ne verrà mostrato solo uno. Devi fare 'foo as bar' per ottenere' -> bar' –

0
$SqlInfo="select a.name, b.data fromtable1 a, table2 b where a.id=b.a_id"; 
$query = $this->db->query($SqlInfo); 

provare in questo modo, è possibile aggiungere una terza tabella denominata c e aggiungere un comando "and" al comando sql.

+0

Sono un grande niubbo. Puoi spiegarlo un po 'di più? –

9

Basta aggiungere l'altra tabella al metodo "-> from()". Qualcosa di simile:

$this->db->select('t1.field, t2.field2') 
      ->from('table1 AS t1, table2 AS t2') 
      ->where('t1.id = t2.table1_id') 
      ->where('t1.user_id', $user_id); 
+0

Ciò produce una sintassi interrotta. –

+0

Non dalla mia parte. Puoi elaborare? – Favio

+1

Questa sintassi è supportata solo in php5 – Mint

1

Penso che la sintassi non sia corretta. È necessario selezionare un record. Ho due tabelle, e ho un id da un trasferimento tabella per parametro, e la relazione di entrambe le tabelle.

8

Penso che la domanda non riguardasse tanto i join quanto il modo in cui visualizzare i valori da due tabelle diverse: la Guida per l'utente non sembra spiegarlo.

Ecco il mio prendere:

$this->db->select('u.*, c.company, r.description'); 
    $this->db->from('users u, company c, roles r'); 
    $this->db->where('c.id = u.id_company'); 
    $this->db->where('r.permissions = u.permissions'); 
    $query = $this->db->get(); 
+0

Questo è esattamente quello che dovevo vedere. Non ero sicuro che una stringa delimitata da una virgola o una matrice con più valori sarebbe la sintassi corretta. Inoltre non era sicuro di abbinarli nel metodo where. – notacouch

+0

Puoi farlo se ti serve il set di record: return $ this-> db-> get() -> result(); –

+0

migliore soluzione, ha funzionato per me –

1

Prova questa

$this->db->select('*') 
      ->from('student') 
      ->where('student.roll_no',$id) 
      ->join('student_details','student_details.roll_no = student.roll_no') 
      ->join('course_details','course_details.roll_no = student.roll_no'); 
    $query = $this->db->get(); 
    return $query->row_array(); 
Problemi correlati