2016-09-07 2 views
3

に参加中 "(" 削除:CodeIgniterのは、これは私のコードです...私はJOIN句で問題を取得しています句

$this->db->select("users.id, users.first_name, users.second_name")->from("users"); 
$this->db->join("users_groups", "users_groups.user_id=users.id AND (users_groups.group_id=".$this->config->item("admin_group")." OR users_groups.group_id=".$this->config->item("admin_location_group")." OR users_groups.group_id=".$this->config->item("employee_group").")", "INNER"); 
return $this->db->get()->result(); 

そして、何、それは生産はこれです:

SELECT `users`.`id`, `users`.`first_name`, `users`.`second_name` FROM `users` INNER JOIN `users_groups` ON `users_groups`.`user_id`=`users`.`id` AND `users_groups`.`group_id`=1 OR `users_groups`.`group_id`=8 OR `users_groups`.`group_id`=4) 

A users_groupsgroup_id = 1が削除される前に、カッコ... ??

ありがとう理由についてどんな考え。

+1

私は、このクエリには、データをエスケープしないと、ブラケットを取り除いてパーサーがエスケープするのを止めるかもしれないという、4番目のオプションの引数があると信じています。しかし、これは確かに特有です。私はクエリ自体に何か間違ったものは見当たりません。 – PaulD

+0

クエリは、 'AND'の後に' WHERE users_groups.group_id = 1 OR users_groups.group_id = 8 OR users_groups.group_id = 4'を意味しますか? – Benyi

+1

ありがとう@PaulD ... 4番目のパラメータは解決策です(解決策として私が良いものとしてマークした場合)。 –

答えて

2

Joinクエリには、trueに設定するとデータがエスケープされない場合、パーサーが角括弧を削除してエスケープするのを止めるという4番目のオプションの引数があります。ドキュメントから

$table (string) – Table name to join 
    $cond (string) – The JOIN ON condition 
    $type (string) – The JOIN type 
    $escape (bool) – Whether to escape values and identifiers 

戻り値:

は($表、$指揮[、$タイプ= '' [、$エスケープ= NULL]]) パラメータに参加します

CI_DB_query_builder instance (method chaining) 

http://www.codeigniter.com/user_guide/database/query_builder.html#CI_DB_query_builder::join

関連する問題