2017-04-18 104 views
0

大家好,这是我的第一篇文章,在给了我很多工作之后,我的头只是不想再合作了,我在网上搜索了答案, t查找相关案例,我在laravel 5.2中使用查询工作,表示查询是获取项目进度并计算共享相同进度的项目以饼图显示。对已分组查询的结果进行分组sql/laravel

关系如下:

我有3个表:

  1. 项目
  2. 步骤来完成(每个人都有一个百分比)。
  3. 每一步每一个项目的
  4. 进度(已完成true或false)

现在我有这样的代码

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%" 
    } 
] 

非常感谢,如果任何人都可以帮我这个,我还在努力弄清楚:(

回答

0

如果结果不是一个集合其转换为收集和运用以下

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

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

return $result; 

希望它有帮助。

+0

我对此采取了类似的方法,是的它创造了奇迹,所以我将这标记为一个有效的答案,非常感谢您的答案! –

+0

不客气 – oseintow