2017-02-05 13 views
1

Laravelでこのクエリを実行するにはどうすればよいですか?LaravelでASとJOINから選択

SELECT * 
FROM conversion t1 
    JOIN (SELECT report_id, MAX(id) id 
      FROM conversion 
      GROUP BY report_id) AS t2 
    ON t1.id = t2.id AND t1.report_id = t2.report_id 

私はすでにLaravelドキュメンタリーで読んで何かを見つけることができません、

私はすでにSQLで試してみて、作業が、私はLaravelでこのクエリを実行する方法がわかりません。

ご協力ありがとうございます。ありがとうございます。

答えて

4

私はこれがあなたの質問に対する正しい解決策だと思う:

$subQuery = \DB::table('conversion') 
    ->selectRaw('report_id, MAX(id) id') 
    ->groupBy('report_id') 
    ->toSql(); 

$data = \DB::table('conversion t1') 
    ->join(\DB::raw('(' . $subQuery . ') as t2'), function ($join) { 
     $join->on('t1.id', 't2.id') 
      ->on('t1.report_id', 't2.report_id'); 
    }, null, null, '') 
    ->get(); 

クエリを確認したい場合このうちの1つは、最後に->get()の代わりに->toSql()を使用できます。 出力は:

select * 
from `conversion t1` 
join (
    select report_id, MAX(id) as id 
    from `conversion` 
    group by `report_id` 
) as t2 
on `t1`.`id` = `t2`.`id` 
and `t1`.`report_id` = `t2`.`report_id` 
1

didntのは、今の私のIDEを持っているが、それはこのように動作する必要があります

$results = DB::select(DB::raw ('SELECT * 
    FROM conversion t1 
    JOIN (SELECT report_id, MAX(id) id 
     FROM conversion 
     GROUP BY report_id) AS t2 
     ON t1.id = t2.id AND t1.report_id = t2.report_id')); 
関連する問題