使用group_start的MySQL查询与 - CodeIgniter Active Record

时间:2016-11-16 12:07:04

标签: mysql sql codeigniter activerecord phpmyadmin

Table: search_result

我想将当前的MySQL查询更改为Active Record。

 SELECT * FROM search_result
 WHERE experience 
 LIKE 'hello%' OR
 bio LIKE 'hello%' OR 
 FIND_IN_SET('3D Design',skills);  

我尝试了以下查询,但显示输出错误。

$this->db->from('search_result');
if($keyword){
    $this->db->like('experience', $keyword);
    $this->db->or_like('bio', $keyword);
}elseif($s_id){
    $this->db->where("FIND_IN_SET('$s_id[0]', skills) != ", 0);
    for($x=1; $x < count($s_id); $x++) {
        $this->db->or_where("FIND_IN_SET('$s_id[$x]', skills) != ", 0);
    }
}
............
$query = $this->db->get();
return $query->result_array();

2 个答案:

答案 0 :(得分:0)

你的意思是

$this->db->from('search_result');
$this->db->where("experience LIKE 'hello%' 
                  OR bio LIKE 'hello%'
                  OR  FIND_IN_SET('3D Design',skills)"); 

答案 1 :(得分:0)

我可以看到两个错误,

在原始查询中,您只有在搜索字词后面有通配符%,因此您的有效记录查询应为

$this->db->like('experience', $keyword, 'after');
$this->db->or_like('bio', $keyword, 'after');

elseif中,有一组OR条件,您可以在活动记录中执行此操作,例如

$this->db->group_start();
    $this->db->where("FIND_IN_SET('$s_id[0]', skills)"); // no need to compare to 0
    for($x=1; $x < count($s_id); $x++) {
        $this->db->or_where("FIND_IN_SET('$s_id[$x]', skills)");
$this->db->group_end();

参考:Codeigniter Active Record Query Builder