3

我需要这样的查询

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

但我得到了这个错误

但我得到了这个错误

4

3 回答 3

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();
于 2013-01-23T09:22:59.360 回答
0

您需要删除join.

于 2016-04-09T05:52:06.907 回答
0
 $this->db->join('phone_number',
                              'phone_number.id= users_phone_numbers.phone_num_id AND users_phone_numbers.is_active = 1',
                              'left'); 

删除上面的括号。当没有括号时它对我有用

于 2018-02-21T05:25:31.753 回答