thinkphp中where()和whereOr()有很多种用法,组合成不同的SQL语句,有些常用的可能都了解,但对于一些特殊的,比如一个字段多种条件、一个条件查询多个字段等。
where()部分
//最简单的实用方法,多条件并列查询,基本形式:['字段名1'=>['SQL运算符','值'],'字段名1'=>['SQL运算符','值'],……] $where = ['name' => ['like', '%国%'], 'age' => ['>=', 18]]; Db::table('user') ->where($where) ->find(); //SQL语句 SELECT * FROM `user` WHERE `name` LIKE '%国%' AND `age` >= 18 LIMIT 1
//特殊用法(|和&),多个字段用同一个条件查询,并且用and或or连接 //or(|)的用法 $where = ['name|address' => ['like', '%国%']]; Db::table('user') ->where($where) ->find(); //SQL语句 SELECT * FROM `user` WHERE ( `name` LIKE '%国%' OR `address` LIKE '%国%' ) LIMIT 1 //and(&)的用法 $where = ['name&address' => ['like', '%国%']]; Db::table('user') ->where($where) ->find(); //SQL语句 SELECT * FROM `user` WHERE ( `name` LIKE '%国%' AND `address` LIKE '%国%' ) LIMIT 1
//复杂查询,一个字段同时满足多种查询条件 $where = ['name' => [['like', '%国%'],['like', '%天%'],'or']]; Db::table('user') ->where($where) ->find(); //SQL语句 SELECT * FROM `user` WHERE ( `name` LIKE '%国%' or `name` LIKE '%天%' ) LIMIT 1 //其中如果or不写默认为and连接,或者这里也可以写上and $where = ['name' => [['like', '%国%'],['like', '%天%'],'and']]; Db::table('user') ->where($where) ->find(); where = ['name' => [['like', '%国%'],['like', '%天%']]]; Db::table('user') ->where($where) ->find(); //以上两种方式生成的SQL语句相同 SELECT * FROM `user` WHERE ( `name` LIKE '%国%' AND `name` LIKE '%天%' ) LIMIT 1
whereOr()部分
//最简单的实用方法,多条件or查询,基本形式:['字段名1'=>['SQL运算符','值'],'字段名1'=>['SQL运算符','值'],……] $where = ['name' => ['like', '%国%'], 'age' => ['>=', 18]]; Db::table('user') ->where($where) ->find(); //SQL语句 SELECT * FROM `user` WHERE `name` LIKE '%国%' OR `age` >= 18 LIMIT 1
//复杂用法,在whereOr中使用and,并且多个and之间用or连接(TP6写法) $where = [//第一维代表多个条件 [//第二维之间用or链接 //第三维之间用and连接 ['create_time', '<=', time()], ['status', '=', '1'] ], [ ['id', '>=', 10], ['update_time', '>=', time()], ] ]; Db::table('user') ->whereOr($where) ->find(); //SQL语句 SELECT * FROM `user` WHERE (create_time <= time() and status = 1) or (update_time >= time() and id >= 10)
其他用法
//模糊搜索后,按照搜索结果排序,比如:文章模糊搜索标题和内容,搜索结果优先显示标题 $where = ['title|content' => ['like', '%国%']]; Db::table('article') ->whereOr($where) ->order('titlelike "%国%" desc') ->find();
如果帮助到你,请赏杯奶茶喝~
- 本文链接: https://www.shx1024.top//index/article/details/article_id/102.shtml
- 版权声明:本博客所有文章除特别声明外,均默认采用 许可协议。