Php CodeIgniter$此->;db->;where();组合and和OR的组

Php CodeIgniter$此->;db->;where();组合and和OR的组,php,codeigniter,Php,Codeigniter,我需要创建此选择: SELECT * FROM units WHERE ((um like '%str%' AND desc like '%str%') AND deleted = 0) 所以我试着用 $search = 'str'; $this->db->from('units'); $this->db->where("(um LIKE '%".$this->db->escape_like_str($search)."%' or desc LIKE '

我需要创建此选择:

SELECT * FROM units
WHERE ((um like '%str%'  AND desc like '%str%') AND deleted = 0)
所以我试着用

$search = 'str';

$this->db->from('units');
$this->db->where("(um LIKE '%".$this->db->escape_like_str($search)."%' or
desc LIKE '%".$this->db->escape_like_str($search)."%') and deleted=0");
return $this->db->get();    
但这不起作用,即使在我的其他表、控制器和模块上,它也可以正常工作。 编辑:我看到了为什么它不起作用,因为描述。。。但我的问题还是在下面

我试过用这个,效果很好

$this->db->from('units');
$this->db->where('deleted',0);
$this->db->like('desc', $search);
$this->db->or_like('um', $search);
但其表述如下:

WHERE deleted = 0 AND desc like  '%str%' AND um like  '%str%'
我可以合并还是像1一样?其中删除为另一个,因为现在它显示了由于或类似的原因而删除的所有内容。

从以下单位中选择*((um类'%str%'和desc类'%str%')) 和已删除=0)

你必须做到:

$this->db->select('*');
$this->db->from('units');
$this->db->where("((units.um LIKE '%str%'  AND units.desc LIKE '%str%') AND deleted = '0')",NULL);
$query = $this->db->get();
return $query->result();

这看起来很相似:答案是创建动态where。顺便说一句,不要使用
desc
作为列名,这是一些DBs中的一个关键字-例如,MySQLyeah发现这很难。无论如何,我没有更改它,而是使用了
desc
。@Sid使用units.desc而不是desc实际上这不起作用,因为您必须使用
desc
而不是desc。但我希望将like或_like组合为一个组()。。。如果不可能,我可以知道吗?thanks@Sid我抓不到你。。你说你必须做描述是什么意思?group()和like()是不同的命令,请写下您需要执行的查询,我可以帮助您@Sid无论如何,您应该能够使用units.desc而不是desc$this->db->select('*')$此->数据库->来自('单位')$this->db->where(“($this->db->escape_-LIKE_-str($search)。“%”或desc-LIKE“%”,$this->db->escape_-LIKE_-str($search)。“%”并删除=0);返回$this->db->get();