Как правильно организовать выборку и генерацию древовидной структуры из нескольких таблиц MySQL с разными полями?
Есть 3 таблицы со своими (разными) полями:
country | city | street
Вопрос: Как создать древовидную структуру вложенностей из этих 3 таблиц(например json массив) такого типа:
{
"country1": {
"name_country": <name>
... другие поля из таблицы country
"city_array": {
"city1": {
"name": <name>,
... другие поля из таблицы city
"street_array": {
"street1": {
"namestreet": <name>
... другие поля из таблицу street
}
}
На всякий случай публикую как я сделал сейчас:
$country = DB::query('SELECT * FROM `country`');
// массив стран с ключом по id
$country_id = Transform::groupMassBykey($country,'id');
// массив из ключей id стран (что бы вытащить города)
$country_id_array = array_column($country, 'id');
//города
$city = DB::query('
SELECT * FROM `city` WHERE `idcountry` IN %li', $country_id_array);
// массив из ключей id городов (что бы вытащить улицы)
$city_id = Transform::groupMassBykey($city,'id');
// массив из ключей id улиц
$city_id_array = array_column($city, 'id');
//объединить страны и города
foreach ($city_id as $key => $value) {
$country_id[$value['idcountry']]['citys_array'][$key] = $value;
}
//все улицы к списку стран и городов
$street= DB::query('
SELECT `street`.*, `city`.`idcountry`
FROM `street`
LEFT JOIN `city` ON `city`.`id` = `streеt`.`idcity`
WHERE `idcity` IN %li', $city_id_array
);
//объединить улицы и страны + города
foreach ($street as $value) {
$country_id[$value['idcountry']]['city_array'][$value['idcity']]['street'][] = $value;
}
result $country_id;