网站广告网络推广价格低电脑如何建立网站
学习要点:
 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();
