【问题标题】:Laravel 5.3 model - count a column - which method is fasterLaravel 5.3 模型 - 计算一列 - 哪种方法更快
【发布时间】:2017-05-19 11:35:19
【问题描述】:

我有一个 Level 列,需要计算每个列的数量。

哪些选项更快/更高效,为什么?或者也许是我没有考虑过的更快的方法?

$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();

【问题讨论】:

  • count(*) 按级别分组
  • 第二个,因为泛型方法会比你自定义的方法更快和优化
  • Athlete::select('id', \DB::raw("count(level) as total_count"))->groupBy('level')->get();
  • 哇,3个人发布完全相同的代码^^
  • 你们几乎不可能选择一个他们这么漂亮的答案。 nithin-john 的一个提供了最简单/更易读的输出。谢谢大家 - 学到了很多。

标签: php laravel model eloquent


【解决方案1】:
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();

【讨论】:

    【解决方案2】:

    我认为这是计数的正确方法Count(level) 和按级别分组

     Athlete::select('id', \DB::raw("count(level) as total_count"))->groupBy('level')->get();
    

    【讨论】:

      【解决方案3】:

      最好的方法是使用group bycountlike:

      $count = Athlete::groupBy('level')->select(DB::raw('count(level) as total'))->get();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-08-02
        • 2021-11-15
        • 1970-01-01
        • 2019-11-22
        • 1970-01-01
        • 2021-08-03
        • 1970-01-01
        相关资源
        最近更新 更多