TP的多条件查询功能是非常强大的。
先上句代码热热身:
Db::name('stu')->where(['name'=>'张三','sex'=>'男'])->select();
这就是一个简单的多条件查询
当然大家都知道,这种只是最简单的“=”的形式,要是查询类似于id大于3、姓张的人、年龄在18到30岁之间、位置在山东浙江北京其中一个……该怎么办?
下面就为大家解答,为了节约时间我把所有例子放到一个代码中。
Db::name('stu')->
where([
'id'=>['>','3'],
'name'=>['like','张%'],
'age'=>['between',['18','30']],
'position'=>['in',['山东','浙江','北京']]
])->select();
着急用的朋友上面的代码就应该足够了,下面我们详细介绍下具体where用法和其他技巧。
首先我个人并不喜欢直接在where条件中写一大串,一般都是先存在变量中,最后放进语句中执行。
$where['id']=['>','3'];
$where['name']=['like','张%'];
$where['age']=['between',['18','30']];
//上面这句还可以这么写
//$where['age']=['between','18,30'];
$where['position']=['in',['山东','浙江','北京']];
//同样in也可以换个写法
//$where['position']=['in','山东,浙江,北京'];
Db::name('stu')->where($where)->select();
这种写法有一定的好处,首先就是代码清晰明了,其次就是方便查找错误;
而且还可以根据是否需要来增加条件(类似于搜索效果):
$where[1]=[1];
if($sex){
//根据有无sex来添加条件,当有sex传来时,查询固定sex,没有时查询所有信息
$where['sex']=['=',$sex];
}
这时候可能就有人问了,我想用not查询怎么办,非常简单:
$where['name']=['not like','张%'];
以上这些都是以and连接的查询条件,那么如果想用or该怎么办呢?
举个例子相信大家就都明白了:
$where['id'] = [['<',3],['>',10],'or'];
放个大招!
当你实在不知道where条件怎么写,走投无路时,还有更直接方法,直接在where中写sql条件,例如:
Db::name('stu')->where("sex='男' and age='女' or age<18")->select();
//当然,and也可以换成or