как сделать правильный запрос в бд, чтобы объединить одинаковые значения?

Как сгруппировать массив из базы по повторяющимся значениям? из базы в 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, буду рад помощи. Спасибо!


Ответы (0 шт):