我有一个级别列,需要计算每个列有多少个。
这些选项中哪一个更快/更有效,为什么?或者也许是我没有考虑过的更快方法?
$athletes = Athlete::orderBy('level', 'desc')->get();
foreach ($athletes as $a) {
switch ($a->level) {
case "advanced":
$dataAdvanced += 1;
break;
case "intermediate":
$dataIntermediate += 1;
break;
case "medium":
$dataMedium += 1;
break;
case "beginner":
$dataBeginner += 1;
break;
case "other":
$dataOther += 1;
break;
}
或
$dataAdvanced = Athlete::where('level', 'advanced')->count();
$dataIntermediate = Athlete::where('level', 'intermediate')->count();
$dataMedium = Athlete::where('level', 'medium')->count();
$dataBeginner = Athlete::where('level', 'beginner')->count();
$dataOther = Athlete::where('level', 'other')->count();
If your table name is athletes, note: use DB in controller
$athletesInfo = DB::table('athletes')
->select('level', DB::raw('count(*) as total'))
->groupBy('level')
->get();
我认为这是计算计数(级别(和按级别分组的正确方法
Athlete::select('id', DB::raw("count(level) as total_count"))->groupBy('level')->get();
最好的方法是使用group by
和count
,如下所示:
$count = Athlete::groupBy('level')->select(DB::raw('count(level) as total'))->get();