补充内容:
今天我们就来聊聊limit和page的区别以及group by需要注意的点,where和having的区别
limit和page
区别
Limit
限制查询数量,在进行分页查询的时候用的最多,但是limit在查询限制中的索引值是从0开始的,limit(0,10)代表从第1条数据开始,限制10条数据。
public function limitTest(){
//limit
//原生语句:select id,name from bro_demo limit(0,10) where status = 'normal';
$result = Db::name('demo')
->field('id,name')
->where('status','=','normal')
->limit(0,10)
->select();
dump($result);
}
Page
是thinkphp中自带的人性化分页查询,page方法不需要你自己计算每页的第一条数据,你只需要将每页页数和每页显示多少条数据交给他,他会自动帮你计算每页的第一条数据,例如:page(1,10)代表第一页显示10条数据。
public function pageTest(){
//page
//原生语句:select id,name from bro_demo page(1,10) where status = 'normal';
$result = Db::name('demo')
->field('id,name')
->where('status','=','normal')
->page(1,10)
->select();
dump($result);
}
group by 分组
GROUP方法也是连贯操作方法之一,通常用于结合合计函数,根据一个或多个列对结果集进行分组 。group方法只有一个参数,并且只能使用字符串。
重点
//group by分组
public function groupTest(){
//原生语句:select id,name,max(score) from bro_score group(user_id);
$result = Db::name('score')
->field('id,name,max(score)')
->group('user_id')
->select();
dump($result);
}
having与where(重点)
区别
(1)where:
- 是作用在查询结果进行分组之前,过滤掉不符合条件的数据。
- where中不能包含聚合函数。(注意是:where后面子句不能有聚合函数,而在含有where中可以使用聚合函数)
- 作用在group by和having字句前
- 是作用于对表与视图
(2)having:
-
是作用在查询结果分组之后,筛选满足条件的组,过滤掉数据。
-
通常跟聚合函数一起使用。
-
having子句在聚合后对组记录进行筛选。
-
是作用于分组
//having和where的区别
public function havingTest(){
//where查询
//原生语句: SELECT `id`,`name` FROM `bro_score` WHERE ( score>40 )
$result = Db::name('score')
->field('id,name')
->where('score>40')
->group('user_id')
->select();
dump($result);
//having
//原生语句:SELECT name,max(score) FROM `bro_score` GROUP BY `user_id` HAVING count(score)>=2
$result = Db::name('score')
->field('name,max(score)')
->group('user_id')
->having('count(score)>=2')
->select();
dump($result);
}
执行顺序
当一个查询语句同时出现了where,group by,having,order by的时候,执行顺序和编写顺序是:
1.执行where()方法对全表数据做筛选,返回第1个结果集。
2.针对第1个结果集使用group by分组,返回第2个结果集。
3.针对第2个结果集中的每1组数据执行select()方法,有几组就执行几次,返回第3个结果集。
4.针对第3个结集执行having()方法进行筛选,返回第4个结果集。
5.针对第4个结果集使用order by排序。