设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 手机 数据
当前位置: 首页 > 站长学院 > PHP教程 > 正文

Laravel项目中怎么对数据库开展子查询

发布时间:2022-06-30 13:40 所属栏目:121 来源:互联网
导读:关于Laravel项目中怎么对数据库进行子查询的知识有一些人不是很理解,对此小编给大家总结了相关内容,具有一定的参考借鉴价值,而且易于学习与理解,希望能对大家有所帮助,有这个方面学习需要的朋友就继续往下看吧。 default = env(DB_CONNECTION, mysql),
  关于“Laravel项目中怎么对数据库进行子查询”的知识有一些人不是很理解,对此小编给大家总结了相关内容,具有一定的参考借鉴价值,而且易于学习与理解,希望能对大家有所帮助,有这个方面学习需要的朋友就继续往下看吧。

  'default' => env('DB_CONNECTION', 'mysql'), //默认使用mysql为连接库
 
  'connections' => [
 
    'mysql' => [
     'driver' => 'mysql',
     'host'  => '192.168.0.xx',
     'database' => 'database',
     'username' => 'root',
     'password' => '',
     'charset' => 'utf8',
     'collation' => 'utf8_unicode_ci',
     'prefix' => 'tb_',
     'strict' => false,
    ],
 
    'mysql_snapshot' => [
     'driver' => 'mysql',
     'host'  => env('DB_HOST_SNAPSHOT', '192.168.0.xx'),
     'database' => env('DB_DATABASE_SNAPSHOT', 'snapshot'),
     'username' => env('DB_USERNAME_SNAPSHOT', 'root'),
     'password' => env('DB_PASSWORD_SNAPSHOT', ''),
     'charset' => 'utf8',
     'collation' => 'utf8_unicode_ci',
     'prefix' => 'tb_',
     'strict' => false,
    ],
   ],
  在某个需求中,需要使用子查询获取snapshot快照表库的关联数据,从而实现以下sql逻辑
 
  SELECT ... From
   (SELECT
    sum(game_count) AS sum_count,
    max(game_count) AS max_count,
    game_room_id,
    record_date
   FROM
    `tb_xx_snapshot`
    WHERE
    record_date BETWEEN '2017-05-17' AND '2017-05-23'
    AND

  实现上述需求完整代码如下:
 
  $subQuery= GameroomModel::select(DB::raw('sum(game_count) as sum_count,max(game_count) as max_count,record_date,game_room_id'))   
      ->whereBetween('record_date',[$beginDay,$endDay])
      ->where('type','1')
      ->groupBy('game_room_id');
 
  $main = DB::connection('mysql_snapshot')
    ->table(DB::raw("({$subQuery->toSql()}) as tb_main"))
    ->mergeBindings($playerGame->getQuery())
    ->join('gameroom_snapshot as gg', function ($join) {
     $join->on('gg.game_count', '=', 'main.max_count')
       ->on('gg.game_room_id', '=', 'main.game_room_id');
    })
    - >select('main.max_count','main.sum_count','gg.record_date','main.game_room_id')
    ->whereBetween('gg.record_date',[$beginDay,$endDay])
    ->groupBy('main.game_room_id')
    ->get();
  代码中子查询和外层都group by了一次,应该可以再优化一下.
 
  上述内容具有一定的借鉴价值,感兴趣的朋友可以参考,希望能对大家有帮助。

(编辑:ASP站长网)

    网友评论
    推荐文章
      热点阅读