Оптимизация запроса - формирование json

171
20 мая 2019, 12:20

Добрый вечер дорогие друзья. Есть вопрос. JOIN-ом объединил две таблицы

    'SELECT portfolio.id, portfolio.name, images.path from portfolio join images on portfolio.id = images.portfolio_id'

и получил такую вот выборку.

id => 1, name => first, path => cars1.jpg
id => 1, name => first, path => cars2.jpg
id => 2, name => second, path => cars3.jpg
id => 2, name => second, path => cars4.jpg

Теперь мне необходимо сформировать эту выборку в json следующего вида:

[ 
0: { 
    id: 1,  
    name: first,  
    path: [ 
        0: cars1.jpg,  
        1: cars2.jpg 
        ] 
    }, 
1: { 
    id: 2,  
    name: second,  
    path: [ 
        0: cars3.jpg,  
        1: cars4.jpg 
        ] 
    } 
]

У меня в принципе получилось это сделать, но правда идиотским способом:

$result = []; 
 
$query = mysqli_query($connection, "select * from portfolio"); 
 
while($row = mysqli_fetch_assoc($query)){ 
    $id = $row['id']; 
    $query_images = mysqli_query($connection, "select path from images where portfolio_id ="."$id"); 
 
    while($image_row = mysqli_fetch_assoc($query_images)) { 
        $row['images'][] = $image_row['path']; 
    } 
    $result[] = $row; 
}

Потому ребятки очень сильно хочется услышать ваше мнение. Подмогните плиз. :)

Answer 1

Если просто пройтись по первой выборке:

$arr=[
    ["id" => 1, "name" => "first", "path" => "cars1.jpg"],
    ["id" => 1, "name" => "first", "path" => "cars2.jpg"],
    ["id" => 2, "name" => "second", "path" => "cars3.jpg"],
    ["id" => 2, "name" => "second", "path" => "cars4.jpg"],
];
foreach($arr as $k=>$v){
    $result[$v['id']]['id']=$v['id'];
    $result[$v['id']]['name']=$v['name'];
    $result[$v['id']]['path'][]=$v['path'];
}
$result=array_values($result); // сброс ключей (по желанию)
echo '<pre>'; print_r(json_encode($result,JSON_PRETTY_PRINT));

или сразу в while

while($row = mysqli_fetch_assoc($query)){
    $result[$row['id']]['id']=$row['id'];
    $result[$row['id']]['name']=$row['name'];
    $result[$row['id']]['path'][]=$row['path'];
}
READ ALSO
PHP - json_decode как работать с таким JSON?

PHP - json_decode как работать с таким JSON?

Помогите разобратьсяЕсть JSON, но не могу понять что за структура и правильная ли она

138
почему в пхп-файле пишут &lt;?php ?&gt; несколько раз?

почему в пхп-файле пишут <?php ?> несколько раз?

часто встречается код, который содержит открытие и закрытие тегов php на каждой строкеНапример:

130
Что такое CRTP?

Что такое CRTP?

Что такое curiously recurring template pattern (CRTP)? Когда его использовать?

156
Структура классов

Структура классов

Всех приветствуюНедавно начал свой путь изучения C++

146