2013-01-23 24 views
3

我需要這樣的加入具有多個ON條件的查詢不能在codeigniter中工作?

SELECT * FROM (`users`) 
    LEFT JOIN `users_phone_numbers`  
       ON `users`.`id`= `users_phone_numbers`.`user_id` 
    LEFT JOIN `phone_number` 
      ON (`phone_number`.`id`= `users_phone_numbers`.`phone_num_id` AND users_phone_numbers.is_active = 1) 
WHERE `users`.`id` = 56 

查詢我笨

$this->db->select('*'); 
$this->db->from('users'); 
$this->db->join('users_phone_numbers', 
           'users.id= users_phone_numbers.user_id', 
           'left'); 
      $this->db->join('phone_number', 
           '(phone_number.id= users_phone_numbers.phone_num_id AND users_phone_numbers.is_active = 1)', 
           'left'); 
$this->db->where('users.id = '. $id); 
$result = $q->result_array(); 

有這樣的代碼,但我得到這個錯誤

But i got this error

+0

當你做一個phone_number加入,你真的在​​條件列表中有一個左括號嗎?因爲在你的圖像上,部分看起來像'... JOIN \'phone_number \'ON \'phone_number \'。'''''''而不是'... JOIN \'phone_number \'ON(\ phone_number \'。\'id \'...' –

+0

我有「(」在條件。我檢查了這個「(」代碼中的5次 –

+0

)爲什麼不嘗試從你的條件中刪除'大括號'。 – Rikesh

回答

3

如果選中的笨的處理條件功能,您將看到以下內容:

// Strip apart the condition and protect the identifiers 
if (preg_match('/([\w\.]+)([\W\s]+)(.+)/', $cond, $match)) 

Codeigniter正在剝離查詢中的前括號。你不能移動WHERE子句中的LEFT JOIN附加子句來解決這個問題嗎?

編輯:

$this->db->select('*'); 
$this->db->from('users'); 
$this->db->join('users_phone_numbers', 
           'users.id= users_phone_numbers.user_id', 
           'left'); 
      $this->db->join('phone_number', 
           'phone_number.id= users_phone_numbers.phone_num_id)', 
           'left'); 
$this->db->where(array('users.id => '. $id, 'users_phone_numbers.is_active' => 1)); 
$result = $q->result_array(); 
+0

怎麼寫查詢? –

+0

如何重寫我的代碼? –

+0

請參閱編輯ab OVE。 – Timmytjc

0

您需要刪除join的第二個條件。

0

$這 - > DB->加入( 'PHONE_NUMBER', 'phone_number.id = users_phone_numbers.phone_num_id AND users_phone_numbers.is_active = 1', '左');

刪除上面的括號。它適用於我沒有支架時