Получить несколько таблиц в массив из 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);