2017-10-03 42 views
0

私はlaravel 5.4を使用しています。私は車の広告をいくつか見せたいとします。私はテーブルからすべての車の記録を取得し、私のページにそれらをロードします。今では、サイドバーにカウントを持つ複数のカテゴリ(車の種類、車の色、自動車の燃料)を表示し、すべてのカテゴリのカウントを表示したいと考えています。複数のフィールドのlaravelでカウントするgroupbyの方法

たとえば、10個の車の広告があり、そのうち2つは赤、3つは緑、5つは白です。私はサイドバーにこのような何かをしたい:

red(2) 
green(3) 
white(5) 

私はSQL groupByでそれをやった:

 $colors = DB::table('advertisments')->select('color_name', DB::raw('count(color_name) as total_color'))->groupBy('color_name')->get(); 
     $gearboxes = DB::table('advertisments')->select('gearbox', DB::raw('count(gearbox) as total_gearbox'))->groupBy('gearbox')->get(); 
     $param = ['colors' => $colors,'gearboxes' => $gearboxes]; 
     return view('ads' , compact('ads','param')); 

はしかし、私は、カテゴリの数十を持っているので、私は1つGROUPBYでそれを行うことはできませんクエリの数が非常に多くなります。 単一のクエリでクエリを実行する方法はありますか?

+0

何が欲しいですか?グループまたはlaravelコードでSQLクエリ? –

+0

それは問題ではない、私はちょうどそれをしたい。しかし、私はそれがSQLとグループでのみ可能だと思う –

答えて

1

アレイを使用すると、さまざまな列を簡単に実行できます。

$params = []; 
$columns = [ 
    'colors' => 'color_name', 
    'gearboxes' => 'gearbox', 
    // put your other columns in this array 
]; 

foreach($columns as $name => $column) 
    $params[$name] = DB::table('advertisments')->select($column, DB::raw('count(' . $column . ') as total'))->groupBy($column)->get(); 

return view('ads' , compact('ads','param')); 
+0

ありがとうございます。そのコードは少なくなりますが、依然として数十のクエリです。クエリを減らす方法はありますか? –

+1

私はそれが異なる列であるとは思わない。サブクエリを使用することもできますが、それでもクエリとしてカウントされます。あなたは毎回データベースの応答を待つことはできませんが、データベースが同じサーバーにあるか、Webサーバーと同じデータセンターにある限り、パフォーマンスは大幅に向上するとは限りません。 – PeterBechP

+0

だから私は複数のグループでこれをやりますが、私はその最善の方法と悪くはないと思います –

関連する問題