加入多个ON条件的查询不能在codeigniter中工作?

时间:2013-01-23 09:00:35

标签: php mysql 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

我在codeigniter中有这样的代码

$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

3 个答案:

答案 0 :(得分:3)

如果您检查Codeigniter处理条件功能,您将看到以下内容:

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

答案 1 :(得分:0)

您需要删除join的第二个条件。

答案 2 :(得分:0)

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

删除上面的括号。当没有支架时它适用于我