• 12月2日:thinkphp中的链式操作


    补充内容:

    今天我们就来聊聊limit和page的区别以及group by需要注意的点,where和having的区别

    limit和page

    区别

    Limit

            限制查询数量,在进行分页查询的时候用的最多,但是limit在查询限制中的索引值是从0开始的,limit(0,10)代表从第1条数据开始,限制10条数据。

    1. public function limitTest(){
    2. //limit
    3. //原生语句:select id,name from bro_demo limit(0,10) where status = 'normal';
    4. $result = Db::name('demo')
    5. ->field('id,name')
    6. ->where('status','=','normal')
    7. ->limit(0,10)
    8. ->select();
    9. dump($result);
    10. }

    Page

            是thinkphp中自带的人性化分页查询,page方法不需要你自己计算每页的第一条数据,你只需要将每页页数和每页显示多少条数据交给他,他会自动帮你计算每页的第一条数据,例如:page(1,10)代表第一页显示10条数据。

    1. public function pageTest(){
    2. //page
    3. //原生语句:select id,name from bro_demo page(1,10) where status = 'normal';
    4. $result = Db::name('demo')
    5. ->field('id,name')
    6. ->where('status','=','normal')
    7. ->page(1,10)
    8. ->select();
    9. dump($result);
    10. }

    group by 分组

    GROUP方法也是连贯操作方法之一,通常用于结合合计函数,根据一个或多个列对结果集进行分组 。group方法只有一个参数,并且只能使用字符串。

    重点

    1. //group by分组
    2. public function groupTest(){
    3. //原生语句:select id,name,max(score) from bro_score group(user_id);
    4. $result = Db::name('score')
    5. ->field('id,name,max(score)')
    6. ->group('user_id')
    7. ->select();
    8. dump($result);
    9. }
    group分两组,组中人员名称相同以最高分数为界限进行查询
    group分两组,组中人员名称不同,选取最高分数后,查询出每组第一条数组赋值

    having与where(重点)

    区别

    (1)where:

    • 是作用在查询结果进行分组之前,过滤掉不符合条件的数据。
    • where中不能包含聚合函数。(注意是:where后面子句不能有聚合函数,而在含有where中可以使用聚合函数)
    • 作用在group by和having字句前
    • 是作用于对表与视图

    (2)having:

    • 是作用在查询结果分组之后,筛选满足条件的组,过滤掉数据。

    • 通常跟聚合函数一起使用。

    • having子句在聚合后对组记录进行筛选。

    • 是作用于分组

    1. //having和where的区别
    2. public function havingTest(){
    3. //where查询
    4. //原生语句: SELECT `id`,`name` FROM `bro_score` WHERE ( score>40 )
    5. $result = Db::name('score')
    6. ->field('id,name')
    7. ->where('score>40')
    8. ->group('user_id')
    9. ->select();
    10. dump($result);
    11. //having
    12. //原生语句:SELECT name,max(score) FROM `bro_score` GROUP BY `user_id` HAVING count(score)>=2
    13. $result = Db::name('score')
    14. ->field('name,max(score)')
    15. ->group('user_id')
    16. ->having('count(score)>=2')
    17. ->select();
    18. dump($result);
    19. }

    执行顺序

    当一个查询语句同时出现了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排序。

  • 相关阅读:
    Python编程入门--第九章 类
    代码整洁之道
    maven使用时候出现,jdk1.5的情况的解决办法
    DGIOT基于低代码amis配置联动短信告警
    (不开窗)给出employees表中排名为奇数行的first_name
    手机提词器有哪些?简单介绍这一款
    [Vue3]Vue3基本概述
    外包干了5天,技术退步明显。。。。。
    [ERROR Swap]: running with swap on is not supported. Please disable swap
    读HLS Bluebook(三)之 IO and Memories
  • 原文地址:https://blog.csdn.net/qq_53457276/article/details/128141903