2012-08-06 6 views
5

, więc mam dwie tabele, i chcę uzyskać wszystkie wiersze z tabeli 1, które spełniają warunki klauzuli where, a następnie dołączyć do nich z tabeli drugiej na podstawie sprzężenia warunki.w codeigniter jak zrobić join z klauzulą ​​where

oto przykładowe tabele:

table1: 

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

table2: 

col1 col3 
1  someval1 
2  someval2 
3  someval3 

Teraz chcę, aby pobrać wszystkie wiersze w tabeli 1, gdzie col1 = 2 i dołączyć te wiersze z wierszy od tabela2 gdzie table2.col1 = table1.col1. Czy to ma sens?

+0

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

Odpowiedz

13

Minęło trochę czasu odkąd pisałem CI, ale jak za this docs page, rozwiązanie może wyglądać następująco:

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

uwaga ta odpowiedź w żaden sposób nie może być interpretowana jako aprobata dla pracy z Code Igniter ;-)

+0

ya myślałem o tym zbyt, z wyjątkiem I wasnn't pewien, czy gdzie klauzula zostanie zastosowany do tabeli 1 zamiast przyłączyć z Tabela1 i Tabela 2. – user1549397

+0

To ma więcej wspólnego z tym, jak sterownik DB kompiluje zapytania; ale w prawie wszystkich przypadkach klauzula where zostanie zastosowana jako pierwsza, więc zapytanie wykonuje tylko sprzężenie w jednym wierszu, które pasuje do klauzuli where. –

+1

Innymi słowy, zauważy, że może uniknąć pracy, stosując klauzulę where do wierszy w tabeli 1, a * następnie * robi łączenie. To właśnie nazywamy * budowaniem planu wykonania kwerendy *. W większości przypadków klauzule ON i WHERE są obsługiwane w podobny sposób; i zwykle odbywa się to w bardzo wydajny sposób. –

2

Spróbuj tego:

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

Nadzieję, że to pomaga :)

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"