Циклы SQL в PHP в JSON с 2 таблицами на основе идентификатора связанной таблицы

#php #json

#php #json

Вопрос:

Я надеюсь, что вы всегда здоровы. У меня возникли проблемы с созданием массива (json) из 2 таблиц. таблица, которая у меня есть, выглядит следующим образом. app_produk_ready эта таблица 1

app_produk_ready_img эта таблица 2

php-код, который я сделал

 <?php
require_once('connection.php');
$response = array();
      $query = mysqli_query($CON,"SELECT * FROM app_produk_ready");
      while($row = mysqli_fetch_array($query)){
            $id=(int)$row['id'];
            $kain=$row['kain'];
            $seri=$row['seri'];
            $harga=(int)$row['harga'];
            $stok=$row['stok'];   
            $data['id']=$id;
            $data['kain']=$kain;
            $data['seri']=$seri;
            $data['harga']=$harga;
            $data['stok']=$stok;
            $tableImage=mysqli_query($CON,"SELECT image FROM app_produk_ready_img WHERE id=$id");
            while($img = mysqli_fetch_array($tableImage)){
            $gambar=$img['image'];
            $data['images'][]=$gambar;
      }
      $response[] = $data; 
}
echo json_encode($response);
mysqli_close($CON);
?>
  

Но результаты, которые я получаю на изображении, фактически накапливаются в цикле. примеры неправильных результатов

 [
{
id: 1,
kain: "Katun Jepang",
seri: "SR01",
harga: 55000,
stok: "100",
images: [
"https://sweetroommedan.com/app2/img_ready/1-1.jpg",
"https://sweetroommedan.com/app2/img_ready/1-2.jpg",
"https://sweetroommedan.com/app2/img_ready/1-3.jpg"
]
},
{
id: 2,
kain: "Katun Jepang",
seri: "SR02",
harga: 55000,
stok: "100",
images: [
"https://sweetroommedan.com/app2/img_ready/1-1.jpg",
"https://sweetroommedan.com/app2/img_ready/1-2.jpg",
"https://sweetroommedan.com/app2/img_ready/1-3.jpg",
"https://sweetroommedan.com/app2/img_ready/2-1.jpg",
"https://sweetroommedan.com/app2/img_ready/2-2.jpg"
]
},
]
  

То, что я хочу, должно быть

 [
{
id: 1,
kain: "Katun Jepang",
seri: "SR01",
harga: 55000,
stok: "100",
images: [
"https://sweetroommedan.com/app2/img_ready/1-1.jpg",
"https://sweetroommedan.com/app2/img_ready/1-2.jpg",
"https://sweetroommedan.com/app2/img_ready/1-3.jpg"
]
},
{
id: 2,
kain: "Katun Jepang",
seri: "SR02",
harga: 55000,
stok: "100",
images: [
"https://sweetroommedan.com/app2/img_ready/2-1.jpg",
"https://sweetroommedan.com/app2/img_ready/2-2.jpg"
]
},
{
id: 3,
kain: "Katun Jepang",
seri: "SR03",
harga: 55000,
stok: "100",
images: [
"https://sweetroommedan.com/app2/img_ready/3-1.jpg",
"https://sweetroommedan.com/app2/img_ready/3-2.jpg",
"https://sweetroommedan.com/app2/img_ready/3-3.jpg",
"https://sweetroommedan.com/app2/img_ready/3-4.jpg"
]
}
]
  

Что мне нужно сделать, чтобы получить ожидаемые результаты? спасибо за помощь.

Комментарии:

1. $data['images'] = []; перед внутренним while циклом?

2. Да, я хочу зациклить изображение на таблице 2 в таблице 1 по идентификатору. Любой метод с 1 запросом?

Ответ №1:

Я бы попытался сбросить массив данных для каждой новой строки из внешнего запроса.

т.е.

 $response = array();
  $query = mysqli_query($CON,"SELECT * FROM app_produk_ready");
  while($row = mysqli_fetch_array($query)){
     data=array();
     (...)
  

Ваша проблема в том, что вы добавляете данные в массив data [‘images’], даже не сбрасывая его.

Ответ №2:

Почему вы используете два запроса по отдельности? Вы можете использовать внутреннее соединение

  SELECT * 
FROM table1 
INNER JOIN table2
      ON table1.primaryKey=table2.table1Id
  

Смотрите: https://www.w3schools.com/sql/sql_join_inner.asp для получения более подробной информации

Комментарии:

1. спасибо за предложение, но ранее я использовал один запрос, но он работает не так, как хотелось бы, потому что изображение в таблице 2 содержит много данных.