kevinsumer 发表于 2015-8-3 09:47:31

CI where多重条件查询


表字段 uid,name, tags,status
这里需要用到name和tags的模糊查询
status的查询

$this->db->where('uid ', '1');
$this->db->or_where('status', '5');

$this->db->like('name', 'na');
$this->db->or_like('tag', 'na');

这样的sql是
where uid=1 and status=5 and ( name like '%na%' ortag like '%na%' )

只是这两个条件的话,没有问题.但如果加多了一个and的条件,这种写法就不行了,如

$this->db->where('uid ', '1');
$this->db->where('status', '1');
$this->db->or_where('status', '5');

$this->db->like('name', 'na');
$this->db->or_like('tag', 'na');

这样构成的sql语句是
where uid=1 and status=1 or status=5 and ( name like '%na%' ortag like '%na%' )
这样查询sql 自动识别成了 where (uid=1 and status=1) or status=5 and ( name like '%na%' ortag like '%na%' )
会查出 库里status=5的值 uid判断就失去作用

想要的到的结果应该是
where uid=1 and (status=1 or status=5)and ( name like '%na%' ortag like '%na%' )

框架里 也没又发现什么方法能够解决



ahcheqiu 发表于 2015-8-4 11:29:19

至于这个问题并不清楚怎么做
但是可能你可以优化一下查询
uid从命名来看应该是一个唯一的吧,那就没必要带后面那么多条件了
自己把uid=1的查出来,用php来判断其他条件吧

timestorm 发表于 2015-8-13 18:33:36

楼主这个问题解决了没?今天也遇到,大家共同开发项目,也不能贸然修改CI数据库代码?求解

coolhpy 发表于 2015-8-24 11:27:09

可以用查询条件组啊~
http://codeigniter.org.cn/user_guide/database/query_builder.html#id7

一叶倾心 发表于 2015-12-29 17:01:29

coolhpy 发表于 2015-8-24 11:27
**** 作者被禁止或删除 内容自动屏蔽 ****

你好,3.0好像才有查询条件组,我的项目用的是2.0,有什么解决方法吗

censtart 发表于 2016-3-21 11:48:43

一叶倾心 发表于 2015-12-29 17:01
你好,3.0好像才有查询条件组,我的项目用的是2.0,有什么解决方法吗

复杂的查询直接写SQL语句还方便

vini123 发表于 2016-5-24 16:34:06

是啊。如果不写条件组,还不好实现。

vini123 发表于 2016-5-24 16:35:14

好二啊,where和or_where配对,like和or_like配对。where和or_like,却不能配对成功。

vini123 发表于 2016-5-24 17:14:57

可以自己写sql。然后调用框架的 $query = $db->query($sql);也可以达到效果。自己写sql可以想与就与,想或就或。只是看起来不怎么舒服。

combook 发表于 2016-5-24 22:01:59

我这儿直接报Message: Call to a member function result_array() on a non-object 这个错误
页: [1]
查看完整版本: CI where多重条件查询