结合where - like - where_in

时间:2016-09-09 00:37:07

标签: php codeigniter where sql-like where-in

让我们说我在CI中有一个模型,返回用户需要的内容..

$find = 'something';
$id_user = Array ( [0] => 1 [1] => 5 [2] => 20 [3] => 21 ) ;

所以,我必须把它放在这里,但出了点问题......

    public function find_pr_by_user ($find,$id_users) {
        $this -> db -> where_in ('req_by_id'.$id_users || 'check_by_id',$id_users || 'approve_by_id',$id_users);
        $this -> db -> where ("(ref_no LIKE '%$find%' || pr_title LIKE '%$find%' || req_date LIKE '%$find%')");
        $query = $this -> db -> get ('pr_data') ;
        return $query -> result () ;
    }

我得到错误数组到字符串转换;我的输入来自$find$id_users,可以是任何内容。我期待这个逻辑,给我表PR_DATA的所有数组,%$find%ref_nopr_titlereq_date$id_users只有req_by_idcheck_by_idapprove_by_idif err := http.ListenAndServeTLS( ":443", "domain-crt.pem", "domain-key.pem", Route.router, ); err != nil { ERROR.Fatal(err) } 中的*(1或5或20或21)。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

这个答案是假设您需要在代码中的第一个where_in()中使用括号。

不幸的是,CodeIgniter并不完全支持使用Active Record的括号。因此,您必须使用where()中更复杂的SQL语法。

public function find_pr_by_user ($find,$id_users) {
    $id_users_glued = implode(",",$id_users);
    $this->db->where('(req_by_id IN (' . $id_users_glued . ') || check_by_id IN (' . $id_users_glued . ') || approve_by_id IN (' . $id_users_glued . '))');
    $this->db->where("(ref_no LIKE '%$find%' || pr_title LIKE '%$find%' || req_date LIKE '%$find%')");
    $query = $this->db->get('pr_data') ;
    return $query->result () ;
}

在CI的Active Record中,这就是语法的处理方式:

FIRST WHERE 将被视为:WHERE (req_by_id IN ($id_users_glued) || check_by_id IN ($id_users_glued) || approve_by_id IN ($id_users_glued)

$id_users_glued会产生类似1,2,3,4,5

的内容

SECOND WHERE 将被视为:AND (ref_no LIKE '%$find%' || pr_title LIKE '%$find%' || req_date LIKE '%$find%')

注意:我没有测试过代码,因为我没有你的数据库结构。如果它不起作用,请告诉我。