Получить несколько таблиц в массив из Mysql (php)

Нужно получить несколько таблиц в один массив, как это правильно реализовать? Я для теста себе такой вариант набросал, но нужно переделать нормально.

        $result = $mysqli->query("SELECT * FROM `itemprice`");
        $allprod = mysqli_fetch_all($result, MYSQLI_ASSOC);
        $allprod = json_encode($allprod); 
        $result2 = $mysqli->query("SELECT * FROM `status`");
        $allprod2 = mysqli_fetch_all($result2, MYSQLI_ASSOC);
        $allprod2 = json_encode($allprod2); 
        $allprod = "[" . $allprod . ',' . $allprod2 . "]";
        print_r($allprod);

Получить массив массивов таблиц. Спасибо!


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

Автор решения: Sergei Kirjanov

Если массив надо плоский, то сначала merge, потом encode:

$allprod = json_encode(array_merge($allprod,$allprod2))

Если не плоский:

$allprod = json_encode([$allprod,$allprod2])
→ Ссылка
Автор решения: Slava Rozhnev

Можно оптимизировать кодб выполняя запросы в цикле:

<?php
$tables = ['itemprice', 'status'];
$allprod = [];

foreach ($tables as $table) {
    $query   = "SELECT * FROM `$table`";
    $result  = $mysqli->query($query);
    $data = mysqli_fetch_all($result, MYSQLI_ASSOC);
    $allprod[$table] = json_encode($data); 
}

var_dump($allprod);

Здесь можно увидеть пример исполнения кода: PHPize.online

Если табицы имеют одинаковую структуру полей, можно использовать один запрос к базе с помощью UNION:

<?php
$tables = ['itemprice', 'other_itemprice'];
$allprod = [];
$query = "";

foreach ($tables as $table) {
    $query   .= ($query ? " UNION ":"") . "SELECT * FROM `$table`";
}

echo "$query\n\n";

$result  = $mysqli->query($query);
$data = mysqli_fetch_all($result, MYSQLI_ASSOC);
$allprod = json_encode($data); 

print_r($allprod);

Прмер кода

→ Ссылка