2015-11-05 58 views
0

當創建一個查詢,我想用join兩次類似如下:使用連接語句,但是如果表是空

$this->db->select('*'); 
$this->db->from('members'); 
$this->db->join('members_group', 'members_group.mgid = members.mgid'); 
$this->db->join('members_profiles','members_profiles.mid = members.mid'); 
$this->db->where('members.mid=' . $id); 
$this->db->get() 

join語句號2的問題,如果有內沒有數據members_profiles表中,查詢返回空數組。但如果我刪除join聲明編號2,結果將是正確的數據。

我怎樣才能使查詢返回的數據members_profiles表是否包含數據的相關成員或不

+0

也許使用LEFT JOIN? –

+0

@John Ruddell:我不會改變任何東西,這是join聲明的默認形式。 –

+0

是的,我知道這一點。即時消息說,你需要將你的連接改爲左連接。否則它會過濾出所有的行 –

回答

3

Codeigniter允許在join()方法的第三個參數中指定變體連接類型。

試試這個:

$this->db->join('members_profiles','members_profiles.mid = members.mid', 'left'); 

一個普通的(內)參加第一個(左側)表中沒有第二個(右側)表匹配抑制記錄。左連接保留左側不匹配右側記錄的記錄。它將NULL值置於應該來自缺少的右側表格的結果集的列中。這正是你想要的。

+0

檢查SQL加入的可視化解釋Jeff Atwood:http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/ – Vickel

+0

謝謝,但有一個小問題,'mid'列如果在'members_profiles'表中沒有與該成員相關的數據,則返回空。 –

+0

@LionKing比嘗試一個完整的外連接,所以你從左右表中獲得所有行? – Terminus

0

使用此

$this->db->select('*'); 
$this->db->from('members'); 
$this->db->join('members_group', 'members_group.mgid = members.mgid'); 
$this->db->join('members_profiles','members_profiles.mid = members.mid','left'); 
$this->db->where('members.mid=' . $id); 
$this->db->get() 
相關問題