【问题标题】:How to count and group a query by two columns?如何按两列对查询进行计数和分组?
【发布时间】:2017-03-05 16:40:42
【问题描述】:

我有一个由 Eloquent Query 返回的集合。集合的每个元素都是一个只有两个整数元素(branch_id、event_id)的数组。我需要创建一个数组或集合,将所有相同的元素对组合在同一个数组中,因为我需要计算一对元素出现的次数并且还能够访问其值。

我正在使用Query Builder的groupBy方法将结果按两列分组,但它只返回我传递给该方法的第一列名称组合的数据。

例如:

    array:15 [▼
  0 => {#277 ▼
    +"branch_id": 1
    +"event_id": 1
  }
  1 => {#279 ▼
    +"branch_id": 1
    +"event_id": 1
  }
  2 => {#280 ▼
    +"branch_id": 1
    +"event_id": 1
  }
  3 => {#281 ▼
    +"branch_id": 1
    +"event_id": 1
  }
  4 => {#282 ▼
    +"branch_id": 1
    +"event_id": 2
  }
  5 => {#283 ▼
    +"branch_id": 1
    +"event_id": 21
  }
  6 => {#292 ▼
    +"branch_id": 58
    +"event_id": 21
  }
  7 => {#284 ▼
    +"branch_id": 2
    +"event_id": 5
  }
  8 => {#285 ▼
    +"branch_id": 3
    +"event_id": 3
  }
  9 => {#286 ▼
    +"branch_id": 4
    +"event_id": 4
  }
  10 => {#287 ▼
    +"branch_id": 5
    +"event_id": 9
  }
  11 => {#289 ▼
    +"branch_id": 5
    +"event_id": 9
  }
  12 => {#288 ▼
    +"branch_id": 5
    +"event_id": 8
  }
  13 => {#290 ▼
    +"branch_id": 7
    +"event_id": 10

如您所见,前四个数组具有相同的值(branch_id: 1, event_id: id)我需要检索这些值组合在一个数组中,以此类推,每个数组具有相同的值。

【问题讨论】:

  • 您的查询构建器看起来如何?您可以分享您进行查询的代码吗?
  • 我用我解决问题的方法回复了帖子。

标签: php mysql arrays laravel


【解决方案1】:

我可以这样做......

    public function getAllIncidents()
{
    $i = 0;
    $data = [];
    $values = DB::table('incidents')->select('branch_id', 'event_id')->orderBy('branch_id')->get()->groupBy('event_id');

    foreach ($values as $key => $value) {
        $collections[$i] = $value->groupBy('branch_id');
        $i++;
    }

    $collections = array_collapse($collections);
    $i = 0;

    foreach ($collections as $key => $collection) {
        $array                  = $collection->toArray();
        $data[$i]['count']      = sizeof($array);
        $data[$i]['branch_id']  = $array[0]->branch_id;
        $data[$i]['event_id']   = $array[0]->event_id;
        $i++;            
    }

    return response()->json($data, 200);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多