学习要点
- where
- field
- alias
- limit
- page
- order
- group
- having
本节课我们来学习链式查询方法中的where()、field()和alias();
一、where
- 表达式查询,就是 where()方法的基础查询方式;
Db::name('user')->where('id','>',70)->select();
- 关联数组查询,通过键值对来数组键值对匹配的查询方式;
$user = Db::name('user')->where([
'gender' => '男',
'price' => 100
])->select();
- 索引数组查询,通过数组里的数组拼装方式来查询;
$user = Db::name('user')->where([
['gender' => '男'],
['price' => '100']
])->select();
- 将复杂的数组组装后,通过变量传递,将增加可读性;
$map[] = ['gender','=','男'];
$map[] = ['price','in', [60, 70, 8]];
$user = Db::name('user')->where($map)->select();
- 字符串形式传递,简单粗暴的查询方式,whereRaw()支持复杂字符串格式;
Db::name('user')->whereRaw( 'gender="男" AND price IN (60, 70, 80)')->select();
- 如果 SOL 查询采用了预处理模式,比如 id=:id,也能够支持;
Db::name('user')->whereRaw('id=:id',['id'=>19])->select();
二、field
- 使用 field()方法,可以指定要查询的字段;
Db::name('user')->field('id,username,email')->select();
Db::name('user')->field(['id','username','email'])->select();
- 使用 field()方法,给指定的字段设置别名;
Db::table('user')->field('id,nickname as name')->select();
Db::table('user')->field(['id','nickname'=>'name'])->select();
- 在 fieldRaw()方法里,可以直接给字段设置 MySOL 函数:
Db::name('user')->fieldRaw('id,SUM(price)')->select();
- 使用 field(true)的布尔参数,可以显式的查询获取所有字段,而不是*;
Db::name('user')->field(true)->select();
- 使用 withoutField()方法中字段排除,可以屏蔽掉想要不显示的字段;
Db::name('user')->withoutField('details')->select();
- 使用 field()方法在新增时,验证字段的合法性;
$data=[
'name' => '礼拜',
'country' => '测试名字'
];
Db::name('user')->field('username,email,details')->insert($data);
三、alias
- 使用alias()方法,给数据库起一个别名;
Db::name('user')->alias('a')->select();
alias的作用是方便join操作方法 比如连接user1表名
Db::table('user')
->alias('a')
->join('user1 b','b.user_id= a.id')
->select();
四、limit
- 使用limit()方法,限制获取输出数据的个数;
Db:name('user')->limit(5)=>select();
- 分页模式,即传递两个参数,比如从第3条开始显示5条limit(2,5);
Db:name('user')->limit(2,5)->select();
- 实现分页,需要严格计算每页显示的条数,然后从第几条开始;
//第一页
Db::name('user')->limit(0,5)->select();
//第二页
Db::name('user')->limit(5,5)->select();
五、page
- page()分页方法,优化了limit()方法,无须计算分页条数;
//第一页
Db::name('user')->page(1,5)->select();
//第二页
Db::name('user')->page(2,5)->select();
六、order
- 使用order()方法,可以指定排序方式,没有指定第二参数,默认asc;
Db::name('uesr')->order('id','desc')->select();
- 支持数组的方式,对多个字段进行排序;
Db::name('user')->order(['create_time'=>'desc','price'=>'asc'])->select();
- 使用orderRaw()方法,支持排序的时候指定MySQL函数;
Db::name('user')->orderRaw('FIELD(username,"东海金城武") DESC')->select();
七、group
- 使用group()方法,给性别不同的人进行price字段的总和统计;
Db::name('user')->filedRaw('gender,SUM(price)')->group('gender')->select();
- 也可以进行多字段分组统计;
Db::name('user')->filedRaw('gender,SUM(price)')->group('gender,password')->select();
八、having
- 使用group()分组之后,再使用having()进行筛选;
$result=Db::name('user')->filedRaw('gender,SUM(price)')->group('gender')->having('SUM(price)>600')->select();