2012-08-06 21 views
5

quindi ho due tabelle, e voglio ottenere tutte le righe dalla tabella 1 che soddisfano le condizioni della clausola where, e quindi unirle con la tabella due in base al join condizioni.in codeigniter come faccio un join con una clausola where

qui sono le tabelle di esempio:

table1: 

col1 col2 col3 
1  a  val1 
2  b  val2 
3  c  val3 

table2: 

col1 col3 
1  someval1 
2  someval2 
3  someval3 

Ora voglio prendere tutte le righe nella tabella 1 dove col1 = 2, e unire le righe con le righe da table2 dove table2.col1 = table1.col1. Ha senso?

+0

roytuts.com/codeigniter-join-example/ – user3470953

risposta

13

E 'stato un po' che ho scritto CI, ma come per this docs page, la soluzione potrebbe essere simile a questo:

$this->db->select('*'); 
$this->db->from('table1'); 
$this->db->join('table2', 'table1.col1 = table2.col1'); 
$this->db->where('table1.col1', 2); 

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

nota questa risposta non è in alcun modo da intendersi come un avallo di lavoro con Code Igniter ;-)

+0

ya pensavo che anche, tranne che wasnn't sicuro se la clausola in cui verrà applicato alla tabella 1 invece del join di tabella 1 e la tabella 2. – user1549397

+0

Questo ha più a che fare con come il tuo driver DB compila le sue query; ma in quasi tutti i casi, la clausola where verrà applicata per prima, in modo che la query esegua il join solo sulla riga che corrisponde alla clausola where. –

+1

In altre parole, noterà che può evitare il lavoro applicando prima la clausola where alle righe in table1 e * then * facendo il join. Questo è ciò a cui ci riferiamo come * costruzione del piano di esecuzione della query *. Nella maggior parte dei casi, le clausole ON e WHERE vengono gestite in modo simile; e di solito è fatto in modo molto efficiente. –

2

Prova questo:

$this->db->select('*'); // Select field 
$this->db->from('table1'); // from Table1 
$this->db->join('table2','table1.col1 = table2.col1','INNER'); // Join table1 with table2 based on the foreign key 
$this->db->where('table1.col1',2); // Set Filter 
$res = $this->db->get(); 

Speranza che aiuta :)

0
$this->db->select('book_id, book_name, author_name, category_name'); 
$this->db->from('books'); 
$this->db->join('category', 'category.category_id = books.category_id'); 
$this->db->where('category_name', 'Self Development'); 
$query = $this->db->get(); 

// Produces SQL: 
select book_id, book_name, author_name, category_name from books 
join category on category.category_id = books.category_id 
where category_name = "Self Development"