создавать вспомогательные массивы при объединении вместо новых записей

64
10

У меня есть 4 лекции, где каждая лекция имеет свое имя:

jbc2014_lezingen

the lectures

Тогда для каждой лекции будут вопросы, в этом случае 2 для каждой лекции:

jbc2014_vragen

the questions for the lectures

Я использую этот запрос:

$query = "SELECT * FROM jbc2014_lezingen
INNER JOIN jbc2014_vragen
ON jbc2014_lezingen.id=jbc2014_vragen.lezing_id";

Это приводит к чему-то вроде:

[0] => Array
(
[id] => 1
[lezing_naam] => lezing 1
[lezing_id] => 1
[vraag] => foobar?
)

[1] => Array
(
[id] => 2
[lezing_naam] => lezing 1
[lezing_id] => 1
[vraag] => foobar?
)
etc.

Поэтому размер массива зависит от количества вопросов, а не от количества лекций. Мне хотелось бы что-то вроде:

[0] => Array
(
[id] => 1
[lezing_naam] => lezing 1
[lezing_id] => 1
[questions] Array (
[0] => [vraag] => foobar?
[1] => [vraag] => foobar?
)

)

Где вопросы находятся в массиве (vraag означает вопрос). Как это может быть сделано?

Позже мне нужны ответы с множественным выбором в массиве внутри вопросов. Но я думаю, что это не будет сложно после того, как это будет исправлено.

спросил(а) 2021-01-25T16:48:37+03:00 4 месяца, 4 недели назад
1
Решение
100

Самое близкое, что вы могли бы сделать, это нечто подобное:

SELECT jbc2014_lezingen.id as lezing_id, 
GROUP_CONCAT(vraag) as vraags
FROM jbc2014_lezingen
INNER JOIN jbc2014_vragen
ON jbc2014_lezingen.id=jbc2014_vragen.lezing_i
GROUP BY jbc2014_lezingen.id

а затем просто получите значения с помощью

explode(",",$row['vraags']);

или создать другой массив с чем-то вроде этого

foreach($raw_result as $key => $value){
$new_array[$key]['lezing_id'] = $value['lezing_id'];
$new_array[$key]['vraags'] = explode(",",$value['vraags']);
}

ответил(а) 2021-01-25T16:48:37+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема