2016-12-06 13 views
1

こんにちは私は問題と解決策を持っていますhttp://dev.mysql.com/doc/refman/5.6/en/example-maximum-column-group-row.htmlこれは特定の列の最大値を持つ行を検索し、他の値でグループ化しています。グルーピングで最大値を持つ行を見つけにくい

私の質問は、以下のクエリをEloquent形式に変換する方法です。

SELECT s1.article, dealer, s1.price 
    FROM shop s1 
    JOIN (
     SELECT article, MAX(price) AS price 
     FROM shop 
     GROUP BY article) AS s2 
ON s1.article = s2.article AND s1.price = s2.price; 

ありがとうございました。

+0

は(あなたは[生-表現]を使用してみましたhttps://laravel.com/docs/5.3/queries#raw-expressions)? – KuKeC

+0

私は持っていますが、どうにかして動作させることができませんでした.SQL全体をDB :: select( 'query')内に置くと動作させることができます。 – Lee

答えて

2

だけでテーブル名を削除し、モデルのインスタンスに置き換える

DB::table(DB::raw('shop as s1')) 
    ->join(
     DB::raw('(SELECT article, MAX(price) AS price FROM shop GROUP BY article) as s2'), 
    function($query) { 
     $query->on('s1.article', '=', 's2.article') 
      ->on('s1.price', '=', 's2.price'); 
    })->get(); 
0

DB::query()は簡単に使用できます。また、Queries - Joinsから、または、Raw Expressionsのジョインを適用するのに役立つこともできます。雄弁を使用している場合、あなたは以下を使用することができ、生Builderを使用して

0

これを試してみてください:

Shop::join('shop as shop2', 'shop.article', '=', 'shop2.article') 
     ->groupBy('shop.article', 'shop.price') 
     ->havingRaw('max(shop2.price) = shop.price') 
     ->get() 
関連する問題