CodeIgniter Query Builder类嵌套查询

时间:2018-03-21 18:14:09

标签: php mysql codeigniter-3 query-builder

我有这个查询在mysql上工作正常,但我不能让它在CodeIngniter的Query Builder类中工作。这是一个包含多个输入的搜索框。

我试过这个,但无法使它发挥作用。

$this->db->like('num_articulo ', $aricle_number, 'after');
$array = array('descripcion1' => $article_description, 'descripcion2' => $article_description)
$this->db->or_like($array);
$this->db->where('status', 1);
       return $this->db->get('articulos')->result_array();

这是我的sql

SELECT * FROM articulos WHERE num_articulo LIKE 'yyyyy%' AND (descripcion1 LIKE '%xxxx%' OR descripcion2 LIKE '%xxxx%')

有什么想法吗?  谢谢先进

2 个答案:

答案 0 :(得分:1)

CodeIgniter查询生成器具有整洁的query grouping功能:

$this->db->group_start()
$this->db->group_end()

因此,您的查询看起来就像纯QB一样:

$this->db->like('num_articulo ', $aricle_number, 'after');
$this->db->group_start();
    $this->db->like('descripcion1', $article_description);
    $this->db->or_like('descripcion2',  $article_description);
$this->db->group_end();
$this->db->where('status', 1); // This one doesn't seem to appear in your query example?

$this->db->get('articulos')->result_array();

您将获得以下查询:

SELECT * FROM `articulos` WHERE `num_articulo` LIKE 'yyyyy%' ESCAPE '!' AND ( `descripcion1` LIKE '%xxxx%' ESCAPE '!' OR `descripcion2` LIKE '%xxxx%' ESCAPE '!' ) AND `status` = 1

注意:CodeIgniter在内部添加ESCAPE '!'以标识转义符号。

答案 1 :(得分:0)

可能不是最好的事情,但它运作得很好。

$this->db->like('num_articulo', $number, 'after');
$this->db->where('status', 1);
$this->db->where('(descripcion1 LIKE "%'.$search_data.'%" OR descripcion2 LIKE "%'.$search_data.'%")');
return $this->db->get('articulos')->result_array();