Pogrupowanie danych w tablicy po wyciagnieciu z bazy

0

Witajcie mam drobny problem z pozoru bardzo prosty ale nie chodzi mi o to jak to zrobić najprościej ale o to jak to zrobić najwydajniej.
mam tablicę która składa się z danych pobranych z bazy danych

  0 => 
    array (
      'team' => string 'Dax' 
      'user' => string '123' 
      'qualification_id' => string '12'
        )
  1 => 
    array (
      'team' => string 'Dax' 
      'user' => string '123' 
      'qualification_id' => string '9' 
          )
     
  2 => 
    array (
      'team'=> string 'Dax' 
      'user' => string '123' 
      'qualification_id' => string '8' 
          )

Wyniki w tabeli różnią sie jedynie qualification id i danymi użytkownika jeśli użytkownicy sa różni..
Dane użytkownika sie powtarzają a ja chciałbym uzyskać tablicę w której dane użytkownika uzyskam raz natomiast qualification_id będzie tablicą kwalifikacji danego użytkownika.
Chciałbym aby z blisko 7000 000 wyników zrobić tabelkę w której dostanę co następuje...

result = array(
  1 => 
    array (
      'staff' => string 'Dax' 
      'user' => string '187' 
      'qualification_ids' => array(1,7,9)
          )
     
  2 => 
    array (
      'staff' => string 'Joe' (length=12)
      'user' => string '123' (length=4)
      'qualification_ids' => array(9,5,5)
          )

)

Mogę to zrobić tak:

       public static function formatitemList($itemList){
        $result =array();
     foreach ($itemList as $item){
         if (!array_key_exists($item['user'], $result)){
             $item['qualification_id'] = array($item['qualification_id']);
             $result[$item['user']] = $item;
         }else{
        $result[$item['user']]['qualification_id'][] =$item['qualification_id'];
         }
     }
     return $result;
	 }
	 }

Wtedy dostanę tablicę indeksowaną przez id użytkowników z ich danymi i qualifications jako array. tak jak chcę, ale czy nie da się tego zrobić jakoś jeszcze bardziej optymalnie? (szkoda ze mysql nie potrafi zwrócic objektów z subsetami.. ;)

0

Pokaż zapytanie SQL (najlepiej dorzuć plik SQL z tabelkami i przykładowymi danymi), możliwe, że wykombinujemy coś lepszego na etapie zapytania. Bądź rozbijemy problem na dwa zapytania (żeby nie było potrzeby przetwarzać całej tablicy z wynikiem potem).

1 użytkowników online, w tym zalogowanych: 0, gości: 1