将已分组的查询sql / laravel的结果分组

时间:2017-04-18 19:35:05

标签: laravel

大家好,这是我的第一篇文章,在给了我很多工作后,我的头脑不再想要合作,我已经在网上搜索了答案,但无法找到相关案例,我在laravel 5.2中使用查询工作,表示查询是为了获取项目的进度并计算共享相同进度的项目以在饼图中显示。

关系如下:

我有3张桌子:

  1. 产品
  2. 完成步骤(每个人都有一个百分比)。
  3. 每个步骤的每个项目的进度(已完成真或假)
  4. 现在我有了这段代码

    table('items as i')
            ->join('items_sectors as is', 'i.sector_id', '=', 'is.id')
            ->join('sectors_steps_progress as stp', 'i.id', '=', 'stp.item_id')
            ->join('sectors_steps as cs', 'stp.step_id', '=', 'cs.id')
            ->where('stp.completed', true)
            ->selectRaw('count(distinct i.id) as count, CONCAT(sum(cs.percentage), "%") as percentage')
            ->groupBy('stp.completed', 'i.id');
    

    这有一些测试数据输出

    array:3 [▼
      0 => {#2042 ▼
        +"count": 1
        +"percentage": "50%"
      }
      1 => {#2043 ▼
        +"count": 1
        +"percentage": "100%"
      }
      2 => {#2044 ▼
        +"count": 1
        +"percentage": "100%"
      }
    ]
    

    我想要的是现在加入所有比赛"百分比"并计算它们以便它最终会像:

    array:3 [▼
      0 => {#2042 ▼
        +"count": 1
        +"label": "50%"
      }
      1 => {#2043 ▼
        +"count": 2
        +"label": "100%"
      }
    ]
    

    非常感谢,如果有人能帮我解决这个问题,我仍然想弄清楚:(

1 个答案:

答案 0 :(得分:0)

如果结果不是集合,则将其转换为集合并应用下面的代码

 $result = $array->groupBy("percentage")
        ->map(function($q){
            $newArray['count'] = count($q);
            $newArray['percentage'] = $q[0]['percentage'];

            return $newArray;
        })->values();

return $result;

希望它有所帮助。