当前位置: 首页 > news >正文

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.lryc.cn/news/67215.html

相关文章:

  • 【剑指 Offer】05,替换字符创中的空格;难度等级:简单。易错点:C++中 char 和 string 类型的转换
  • 图像分割入门教程
  • C++入门教程||C++ 信号处理||C++ 多线程
  • java计算矩形的面积和周长的方法
  • 一分钟掌握如何更换Jupyter Notebook的主题和字体
  • 如何系统全面的自学自动化测试?明确后我直接拿到了20K
  • 【搭建私有云盘】无公网IP,在外远程访问本地微力同步
  • Pytest自动化测试框架一些常见的插件
  • 【力扣】刷题+剑指offer第二版
  • QueryStorm Crack
  • 网络安全与隐私保护:挑战与应对策略
  • 不同应用场景瑞芯微RK3568主板方案定制
  • 公司数字化转型,如何选择高效的知识管理工具?
  • 银行从业法律法规(初级)-多选
  • Maven 依赖管理 学习
  • 分享105个NET源码ASP源码,总有一款适合您
  • Web缓存利用分析(三)
  • Git合并冲突的根本原因和解决方法
  • 从C语言到C++⑨(第三章_CC++内存管理)详解new和delete+面试题笔试题
  • 阿里云服务器安装宝塔Linux面板教程图解
  • ORA-01555 ORA-22924 快照过旧问题处理
  • Win11系统更新后网络速度变的很慢怎么办?
  • 了解 XML结构(一)
  • Vue简单语法记录
  • matplotlib的安装和使用教程:中文字体及语言参数设置
  • mysql深分页
  • 【JavaScript由浅入深】常用的正则表达式
  • QT常用类型字节数组QByteArray及其基本使用
  • APP 兼容性测试是什么?8年测试老鸟告诉你
  • Golang每日一练(leetDay0061) 表列序号、阶乘后的零