学习内容: 视频教程: https://www.kancloud.cn/tpshop/thinkphp5/225450 完全开发手册: https://www.kancloud.cn/manual/thinkphp5/135181
初学如果去看完全开发手册,会要花很多时间。 看视频可以快速的掌握,重要的、实用的内容。
-查询表达式 -批量查询 -快捷查询 -视图查询 -使用Query对象 -获取数据 -获取列数据 -聚合查询 -字符串查询 -日期查询 -分块查询
再建一个表 CREATE TABLE tp_data ( id int(11) NOT NULL, name varchar(45) DEFAULT NULL, status tinyint(1) DEFAULT NULL, score tinyint(2) DEFAULT NULL, email varchar(45) DEFAULT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; SELECT * FROM tp5.tp_data;
做视图,我们在user表中增加两个字段: ALTER TABLE tp5.tp_user ADD COLUMN nickname VARCHAR(45) NULL AFTER email, ADD COLUMN mobile VARCHAR(20) NULL AFTER nickname;
做日期查询,添加create_time字段: ALTER TABLE tp5.tp_data ADD COLUMN create_time DATETIME NULL AFTER score;
public function hello6(){ $result = Db::name('data')->where('id',4)->find(); // 可以写成 >= <= <> in[4,5,6,7,8] 'between',[5,8] $result = Db::name('data')->where('id','between',[1,9])->select(); print_r($result); // 查询某个字段是否为NULL $result = Db::name('data') ->where('name',null) ->select(); print_r($result); // 使用EXP条件表达式,表示后面是原生的SQL语句表达式 // 按原生sql语句写 // $result = Db::name('data')->where('id','exp'," in(1,2,3,4)")->select(); $result = Db::name('data')->where('id','exp'," >1 and name='111'")->select(); print_r($result); // 使用多个字段查询 $result = Db::name('data') ->where('id','>=',1) ->where('name','like','%php%') ->select(); print_r($result); // 或者使用 $result = Db::name('data') ->where([ 'id'=>['>=',1], 'name'=>['like','%think%'] ])->select(); print_r($result); // 使用OR,AND混合条件查询 $result = Db::name('data') ->where('name','like','%think%') ->where('id',['in',[1,2,3]],['>=',1],'or') ->limit(2) ->select(); print_r($result); // 批量查询 $result = Db::name('data') ->where([ 'id'=>[['in',[1,2,3]],['>=',1],'or'], 'name'=>['like','%php%'] ]) ->limit(10) ->select(); print_r($result); // 快捷查询 $result = Db::name('data') ->where('id&status','>',0) ->limit(10) ->select(); print_r($result); $result = Db::name('data') ->where('id|status','>',0) ->limit(10) ->select(); print_r($result); } public function hello7(){ // 视图查询 // $result = Db::view('data','id,name,status') ->view('user',['nickname'=>'username','mobile','email'],'user.id=data.id') ->where('data.status',1) ->select(); print_r($result); // 使用Query对象 $query = new \think\db\Query; $query->name('data')->where('name','like','%think%') ->where('id','>=',1) ->limit(10); $result = Db::select($query); print_r($result); // 时间(日期)查询 // 查询创建时间>'2017-01-01'的数据 $result = Db::name('data') ->whereTime('create_time','>','2017-01-01') ->select(); dump($result); // 查询本周添加的数据 $result = Db::name('data') ->whereTime('create_time','>','this week') ->select(); dump($result); // 查询近两天添加的数据 $result = Db::name('data') ->whereTime('create_time','>','-2 days') ->select(); dump($result); // 查询创建日期在2017-01-01~2018-01-01的数据 $result= Db::name('data') ->whereTime('create_time','between',['2017-01-01','2018-01-01']) ->select(); dump($result); // 字符串查询 $result = Db::name('data') ->where('id>:id AND name IS NOT NULL',['id'=>10]) ->select(); dump($result); // 获取某行某列某个值 $name = Db::name('data')->where('id',16)->value('name'); print($name); // 获取某列 $name = Db::name('data') ->where('status',1) ->column('name'); print_r($result); // 获取id键名name为值的,键值对,这个有用!比如下拉框取某人 $list = Db::name('data') ->where('status',1) ->column('name','id'); print_r($list); // 获取id键名的数据集 $list = Db::name('data') ->where('status',1) ->column('*','id'); print_r($list); // 聚合查询 count max min avg sum // 统计data表的数据 $max = Db::name('data')->where('status',1)->max('id'); echo $max; // 建议字符串,简单查询,为了防注入,用占位符方式 $result = Db::name('data') ->where("id>:id and name like :name",['id'=>10,'name'=>'%php%']) ->select(); print_r($result); // 日期查询 建议日期类型为int // 查询时间>'2017-01-01'的数据 $result = Db::name('user') ->whereTime('reg_time','>','2017-01-01') ->select(); dump($result); // 查询日期在2017-01-01~2018-01-01的数据 $result= Db::name('user') ->whereTime('reg_time','between',['2017-01-01','2018-01-01']) ->select(); dump($result); // 查询今天 昨天 本周 上周 $result= Db::name('user') ->whereTime('reg_time','today') ->select(); dump($result); // 分块查询 Db::name('data') ->where('status','>',0) ->chunk(2,function($list){ foreach($list as $data){ // 处理2条记录 } }); // 改造后 $p = 0; do{ $result = Db::name('data')->limit($p,2)->select(); $p +=2; print $result; }while(count($result)>0); }