随机取值 不会重复,数量可能没有10个
$list = Db::name('addr')->where('rand()')->limit(10)->column('id');
V5.0.17+版本开始,当你的order排序中使用了SQL函数的时候,请使用orderRaw方法替代order,例如:
$list = Db::name('addr')->orderRaw('rand()')->limit(10)->column('id');//随机取值 不会重复 建议用此方法
//查询不同的值 Db::table('user')->distinct(true)->field('school')->select();
//按照IDS的顺序来排序结果 $exp = ('field(id,'.$ids.')'); return Db::name('size') ->where('id','in',$ids) ->orderRaw($exp) ->select();
//按照IDS的顺序来排序结果
$exp = ('field(id,'.$ids.')');
return Db::name('size') ->where('id','in',$ids) ->orderRaw($exp) ->select();
模糊搜索2个或多个字段,只要字段里面包含其中数据即可搜索出来
$where['core|ltd_name'] = ['like','%'.$key.'%']; $list = Db::name('ltd') ->where($where) ->where('siteswitch','1')//可以关联其他字段 ->where('uid','>',0)//或者判断大于多少 ->select();
使用getTableInfo可以获取表信息,信息类型 包括 fields,type,bind,pk,以数组的形式展示,可以指定某个信息进行获取
// 获取`think_user`表所有信息 Db::getTableInfo('think_user'); // 获取`think_user`表所有字段 Db::getTableInfo('think_user', 'fields'); // 获取`think_user`表所有字段的类型 Db::getTableInfo('think_user', 'type'); // 获取`think_user`表的主键 Db::getTableInfo('think_user', 'pk');
查询表达式支持大部分的SQL查询语法,也是ThinkPHP查询语言的精髓,查询表达式的使用格式:
ThinkPHP
where('字段名','表达式','查询条件'); whereOr('字段名','表达式','查询条件');
表达式不分大小写,支持的查询表达式有下面几种,分别表示的含义是:
//闭包写法 Db::name('goodsorder') ->where($where) ->where('status','2') ->where(function ($wait) { $wait->whereOr("send_status",'2');//发货状态:1=待支付,2=待收货,3=已收货,4=已完成,5=已退款 $wait->whereOr("delivery_status",'1');//自提送货状态:1=配送中,2=待自提,3=已自提 $wait->whereOr("delivery_status",'2');//自提送货状态:1=配送中,2=待自提,3=已自提 }) // ->where('send_status|delivery_status','2')//如果2个字段查询都是同一个值也可以这样写 // ->whereOr('delivery_status','2')//自提送货状态:1=配送中,2=待自提,3=已自提 ->count();// SELECT COUNT(*) AS tp_count FROM `fa_goodsorder` WHERE `uid` = 1001 AND `status` = '2' AND ( `send_status` = '2' OR ( `delivery_status` = '1' OR `delivery_status` = '2' ) ) LIMIT 1" //闭包 传值查询 ->where(function($w) use($tagcar_arr) { foreach ($tagcar_arr as $key => $tagcar_id) { $whereor[] = ['exp',Db::raw("FIND_IN_SET('$tagcar_id',tagcar_ids)")]; $w->whereOr($whereor); } }) ->page($page,$limit) // ->fetchSql(true)//返回查询的sql语句放中间 true 不执行
//闭包写法
Db::name('goodsorder')
->where($where) ->where('status','2') ->where(function ($wait) { $wait->whereOr("send_status",'2');//发货状态:1=待支付,2=待收货,3=已收货,4=已完成,5=已退款 $wait->whereOr("delivery_status",'1');//自提送货状态:1=配送中,2=待自提,3=已自提 $wait->whereOr("delivery_status",'2');//自提送货状态:1=配送中,2=待自提,3=已自提 }) // ->where('send_status|delivery_status','2')//如果2个字段查询都是同一个值也可以这样写 // ->whereOr('delivery_status','2')//自提送货状态:1=配送中,2=待自提,3=已自提
->count();
//
SELECT COUNT(*) AS tp_count FROM `fa_goodsorder` WHERE `uid` = 1001 AND `status` = '2' AND ( `send_status` = '2' OR ( `delivery_status` = '1' OR `delivery_status` = '2' ) ) LIMIT 1"
//闭包 传值查询 ->where(function($w) use($tagcar_arr) { foreach ($tagcar_arr as $key => $tagcar_id) { $whereor[] = ['exp',Db::raw("FIND_IN_SET('$tagcar_id',tagcar_ids)")]; $w->whereOr($whereor); } }) ->page($page,$limit) // ->fetchSql(true)//返回查询的sql语句放中间 true 不执行
//闭包 传值查询 ->where(function($w) use($tagcar_arr) { foreach ($tagcar_arr as $key => $tagcar_id) { $whereor[] = ['exp',Db::raw("FIND_IN_SET('$tagcar_id',tagcar_ids)")]; $w->whereOr($whereor); } }) ->page($page,$limit)
// ->fetchSql(true)//返回查询的sql语句放中间 true 不执行
//查询cate_ids里面含有其中一个的值 $str = '4|9|66|3|10|8|5'; $list = $this->model ->whereRaw('cate_ids REGEXP ?', [$str]) ->where($where) ->order($sort, $order) ->paginate($limit);
时间查询
// 大于某个时间 where('createtime', '> time', '2020-5-20'); // 小于某个时间 where('createtime', '<= time', '2022-7-21'); // 时间区间查询 where('createtime', 'between time', ['2020-5-20', '2022-7-21']); // 时间区间查询 Db::name('order') ->whereTime('createtime', 'between', ['2020-5-20', '2022-7-21']) ->select(); // 不在某个时间区间 Db::name('order') ->whereTime('createtime', 'not between', ['2020-5-20', '2022-7-21']) ->select(); // 查询3个小时内的订单 Db::name('order') ->whereTime('createtime','-3 hours') ->select(); // 获取今天的订单 Db::name('order') ->whereTime('createtime', 'd') ->select(); // 获取本周的订单 Db::name('order') ->whereTime('createtime', 'w') ->select(); // 获取本月的订单 Db::name('order') ->whereTime('createtime', 'm') ->select(); // 获取今年的订单 Db::name('order') ->whereTime('createtime', 'y') ->select(); // 获取今天的订单 Db::name('order') ->whereTime('createtime', 'today') ->select(); // 获取昨天的订单 Db::name('order') ->whereTime('createtime', 'yesterday') ->select(); // 获取本周的订单 Db::name('order') ->whereTime('createtime', 'week') ->select(); // 获取上周的订单 Db::name('order') ->whereTime('createtime', 'last week') ->select(); // 获取本月的订单 Db::name('order') ->whereTime('createtime', 'month') ->select(); // 获取上月的订单 Db::name('order') ->whereTime('createtime', 'last month') ->select(); // 获取今年的订单 Db::name('order') ->whereTime('createtime', 'year') ->select(); // 获取去年的订单 Db::name('order') ->whereTime('createtime', 'last year') ->select();