【问题标题】:MySQL query using group_start with like - CodeIgniter Active RecordMySQL 查询使用 group_start 和 like - CodeIgniter Active Record
【发布时间】:2017-03-30 15:09:43
【问题描述】:

我想将当前的 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();

【问题讨论】:

    标签: mysql sql codeigniter activerecord phpmyadmin


    【解决方案1】:

    你是不是这个意思

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

    【讨论】:

      【解决方案2】:

      我可以看到两个错误,

      在您的原始查询中,您只有在搜索词之后才有通配符%,因此您的活动记录查询应该是

      $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

      【讨论】:

      • 我尝试使用$this-&gt;db-&gt;group_start();,但仍然显示相同的结果。
      • 你遇到了什么问题?
      • 运行原始查询后,我得到 7 个结果。但是对于活动记录,它只显示 3 个(即只有 LIKE 条件的结果)。
      • 你可以在$this-&gt;db-&gt;get();之前echo $this-&gt;db-&gt;get_compiled_select();查看编译后的查询。
      • 那是因为你在if块中放了like条件,在else中放了find_in_set,所以只有一个会执行
      猜你喜欢
      • 2011-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-17
      • 2013-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多