Archives 7月 2022

laravel8 クエリービルダー サブクエリ 複数条件 算術演算 groupBy複数 orderBy DESC混在 生のSQL chank


    サブクエリ
    変数はたいていグローバル化しないと渡せない

    $ranks_tags = DB::table('ranks_tags')->where('label',$this->range_w);

        DB::table('post_tags as p')->select(
            DB::raw(   //この中の''は1セット。最初と最後のみで全体を囲む
            'p.fave_id , p.tag_id, f.name , f.cnt_cheer , s.before_cnt_cheer
            , f.cnt_cheer - s.before_cnt_cheer AS incre_cheer 
            , f.cnt_post, s.before_cnt_post
            , f.cnt_post - s.before_cnt_post AS incre_post
            , cnt_share
            , s.id as ranktag_id'
            )
        )
        ->LeftJoin( 'tags as t' , 'p.tag_id' ,'t.id')
        ->LeftJoin( 'faves as f', 'p.fave_id','f.id')
        ->LeftJoinSub($ranks_tags, 's', function ($join) {
            $join->on('s.tag_id' , 'p.tag_id' );
            $join->on('p.fave_id' , 's.fave_id');
        })
        ->groupBy('p.tag_id' , 'p.fave_id' , 'incre_cheer' , 'ranktag_id' )
        ->orderBy('p.tag_id' ,'asc')
        ->orderBy('incre_cheer' ,'DESC')
        ->orderBy('cnt_post' ,'DESC')
        ->limit(999999)
        // ->toSql(); ←素のSQL文を書き出せる
        ->chunk( $this->max_lows, function ($tag_fave) {
            foreach ($tag_fave as $key => $row) {
                // DB::table('tags')
                //     ->where('id', $tags->id)
                //     ->update(['created_at' => $this->ranges['day']]);
                var_dump($key, $row );
							
			}
            return false; //← これで終わる
		});