как сделать правильный запрос в бд, чтобы объединить одинаковые значения?
Как сгруппировать массив из базы по повторяющимся значениям? из базы в YII вытаскиваю значения в виде массива таким способом
$test_id = 1;
$tests = Tests::find()
->where(['test_id' => $test_id])
->asArray()
->all();
?>
Array
(
[0] => Array
(
[id] => 1
[test_id] => 1
[question_id] => 1
[answer_id] => 1
[answer] => Один
[result] => 0
[question] => Сколько пальцев на руке?
)
[1] => Array
(
[id] => 2
[test_id] => 1
[question_id] => 1
[answer_id] => 2
[answer] => Два
[result] => 0
[question] => Сколько пальцев на руке?
)
[2] => Array
(
[id] => 3
[test_id] => 1
[question_id] => 2
[answer_id] => 1
[answer] => хз
[result] => 0
[question] => В чём смысл жизни?
)
как можно объединить массивы по [question], чтобы вывод был таким?
Array
(
[0] => Array
(
[id] => 1
[test_id] => 1
[question_id] => 1
[answer_id] => [1,2]
[answer] => ['Один' , 'Два']
[result] => 0
[question] => Сколько пальцев на руке?
)
[1] => Array
(
[id] => 3
[test_id] => 1
[question_id] => 2
[answer_id] => 1
[answer] => хз
[result] => 0
[question] => В чём смысл жизни?
)
Пытался выполнить через group_by, но это не помогает так как массив теряет несколько значений
так же пробовал через group_concat
$answers_id = Tests::findBySql('SELECT GROUP_CONCAT(answer_id) as answer_id FROM `tests` GROUP BY question')
->where(['test_id' => $test_id])
->asArray()
->all();
но это тоже не корректно, так как я просто получаю строку из question
как можно привести запрос, чтобы массив выдался именно в таком виде, котором указал выше? Не силён в sql, буду рад помощи. Спасибо!