14.构造器的排序分组.子查询

news/2024/11/13 4:10:14/

学习要点:
1.排序分组
2.子查询
本节课我们来开始学习数据库的构造器查询中的子查询、排序、分组等。
一.排序分组
1. 使用 whereColumn()方法实现两个字段相等的查询结果;
//判断两个相等的字段,同样支持 orWhereColumn()
//支持符号'create_time','>', 'update_time'
//支持符号支持数组多个字段格式['create_time','>', 'update_time']
$users = DB::table('users')
->whereColumn('create_time', 'update_time')
->get();
2. 使用 orderBy()方法实现 desc 或 asc 排序功能。
//支持 orderByRaw 和 orderByDesc 倒序方法
$users = DB::table('users')
->orderBy('id', 'desc')
->get();
3. 使用 latest()方法设置时间倒序来排,默认时间字段是 created_at;
//按照创建时间倒序排,默认字段 created_at
$users = DB::table('users')->latest('create_time')->toSql();
4. 使用 inRandomOrder()方法来随机排序,得到一个随机列表;
//随机排序
$users = DB::table('users')->inRandomOrder()->get();
5. 使用 skip()和 take()限制结果集,或使用 offset()和 limit();
//从第 3 条开始,显示 3 条
$users = DB::table('users')->skip(2)->take(3)->toSql();
$users = DB::table('users')->offset(2)->limit(3)->get();
6. 使用 when()方法可以设置条件选择,执行相应的 SQL 语句;
//when 实现条件选择
$users = DB::table('users')->when(true, function ($query) {
$query->where('id', 19);
}, function ($query) {
$query->where('username', '辉夜');
})->get();
7. 如果 MySQL 在 5.7+,有支持 JSON 数据的新特性;
$users = DB::table('users')->where('list->id', 19)->first();
二.子查询
1. 使用 whereExists()方法实现一个子查询结果,返回相应的主查询;
//通过 books 表数据,查询到 users 表关联的所有用户
$users = DB::table('users')->whereExists(function ($query) {
$query->selectRaw(1)
->from('books')
->whereRaw('laravel_books.user_id = laravel_users.id');
})->toSql();
//whereRaw 这句也可以替代为:whereColumn('books.user_id','users.id');
PS:select 1 from,一般用于子查询的手段,目的是减少开销,提升效率,深入请搜索;
2. 也可以使用 where(字段,function())闭包,来实现一个子查询;
//id=子查询返回的 user_id
$users = DB::table('users')->where('id', function ($query) {
$query->select('user_id')
->from('books')
->whereColumn('books.user_id','users.id');
})->toSql();


http://www.ppmy.cn/news/66682.html

相关文章

人人都可用的ChatGPT,Edge浏览器-免费ChatGPT保姆级教程!非常详细!

人工智能大浪潮已经来临,对于ChatGPT,我觉得任何一个玩互联网的人,都应该重视起来,用起来。但是国内使用需要解决科学上网、注册、收费等繁琐问题。 所以,今天这篇文章就来推荐一个插件,无需任何繁琐操作&…

收集的面试题链接

目录 一份非常值得一看的Java面试题Java面试笔试题大汇总一(最全详细答案)Java面试题大全(2020版)JAVA面试题集模板.doc 一份非常值得一看的Java面试题 https://www.cnblogs.com/bailing80/p/11443409.html Java面试笔试题大汇总一(最全详细答案) 汇总…

【OpenCV-Python】——哈里斯/Shi-Tomas角检测FAST/SIFT/ORB特征点检测暴力/FLANN匹配器对象查找

目录 前言: 1、角检测 1.1 哈里斯角检测 1.2 优化哈里斯角 1.3 Shi-Tomasi角检测 2、特征点检测 2.1 FAST特征点检测 2.2 SIFT特征检测 2.3 ORB特征检测 3、特征匹配 3.1 暴力匹配器 3.2 FLANN匹配器 4、对象查找 总结: 前言: 图…

软件测试测试文档的编写和阅读。

在软件测试中的流程中,测试文档也是一个重要的流程,所以测试人员也需要学习测试文档的编写和阅读。 一、定义: 测试文档(Testing Documentation)记录和描述了整个测试流程,它是整个测试活动中非常重要的文…

C++11大杂烩

C11大杂烩 文章目录 C11大杂烩介绍语法统一的列表初始化:{}初始化initializer_list简化声明的方式autotypeid().name():获取类型名decltype nullptr范围for循环stl库中的一些变化arrayforward_list final和override右值引用和移动语义左值引用和右值引用 移动构造和…

《深度工作》一书摘抄

深度工作非常重要,如果你达不到足够专注,你就解决不了你行业内的那些难题,所以要成为高手,得养成深度工作的习惯 自己总结进入深度工作最好的状态就是断网,远离一切网络相关,手机仍到一个你够不着的地方的 …

redis-benchmark工具入门之生成压测数据写入redis

前言 redis-benchmark是Redis自带的基准测试工具,可以用来压测redis目标集群的性能,也可以生成测试数据,方便测试。 安装redis-benchmark(本文Ubuntu系统) 安装工具包 sudo apt-get install redis-server 或者 apt…

SKU(Stock Keeping Unit)是指库存量单位

SKU(Stock Keeping Unit)是指库存量单位,通常用来管理和追踪商品库存。在电商平台上,一个商品可能有多个颜色、尺码、款式等属性,每种属性都可以看作一个SKU,不同的SKU可能具有不同的价格和库存量。 SKU计…