Я использую PHP и PDO для извлечения набора значений из базы данных, а затем группируюсь по первому столбцу с помощью этого кода:
$result = $sth->fetchAll(PDO::FETCH_GROUP|PDO::FETCH_NUM);
Это означает, что если мои данные находятся в таком формате:
|Column1 |Column2 |Column3| |1 |2 |a| |1 |2 |b|
Он возвращает его как:
1: { [Column2: 2, Column3: a], [Column2:2, Column3:b] }
Как я могу группировать по столбцам 1 и столбцу2, чтобы получить что-то вроде:
1: { 2: { Column3: a, Column3:b } }
Возможно ли это с комбинацией констант PDO?
благодаря
Как вы видели, можно легко легко перестроить массив, сгруппировав его с одним указанным столбцом с помощью PDO::FETCH_GROUP
. То, что вам нужно, это преобразовать 2-мерный массив (результат из базы данных) в 3-мерный массив, но его невозможно перестроить таким образом.
Вам нужно сделать это вручную через вложенные циклы. Это довольно просто, например:
// let's assume $result is: $result = [ [1, 2, 'a'], [1, 2, 'b'] ]; $newResult = []; foreach( $result as $row ) { $newResult[$row[0]][$row[1]][] = $row[2]; } var_dump($newResult);
Он возвращает:
array(1) { [1]=> array(1) { [2]=> array(2) { [0]=> string(1) "a" [1]=> string(1) "b" } } }
и это похоже на то, что вам нужно.
Вы лучше ORDER BY Column1
в вашем наборе результатов запроса и группы в вашем коде следующим образом:
$grouped = []; $lastIdx = null; foreach ($query->fetchAll() as $result) { if ($lastIdx !== $result["Column1"]) { $grouped[$result["Column1"]] = [$result]; } else { $grouped[$result["Column1"]][] = $result; } $lastIdx = $result["Column1"]; }