У меня есть два запроса, которые я хочу объединить, чтобы получить информацию из двух разных таблиц в один массив.
$stmt = $pdo->query("SELECT * FROM Product WHERE id=". $productid);
$row = $stmt->fetch(PDO::FETCH_ASSOC);
$itemData = array(
'id' => $row['id'],
'name' => $row['name'],
'unitprice' => $row['unitprice'],
'quantity' => 1
);
Я хотел бы добавить это к тому же stmt
SELECT size FROM ProductDetails where id=".$productid);
а затем массив $ itemData следующим образом:
$itemData = array(
'id' => $row['id'],
'name' => $row['name'],
'size' => $row['size'],
'unitprice' => $row['unitprice'],
'quantity' => 1
);
Есть ли способ сделать это? Спасибо.
Используйте соединение в своем SQL-запросе и выберите только нужные вам поля.
$stmt = $pdo->query("SELECT p.id, p.name, pd.size, p.unitprice FROM Product as p INNER JOIN ProductDetails as pd ON p.id = pd.productid WHERE p.id=". $productid);
$row = $stmt->fetch(PDO::FETCH_ASSOC);
$itemData = array(
'id' => $row['id'],
'name' => $row['name'],
'size' => $row['size'],
'unitprice' => $row['unitprice'],
'quantity' => 1);
Вы хотите использовать левое соединение здесь
Предложение MySQL LEFT JOIN позволяет запрашивать данные из двух или более таблиц базы данных. Предложение LEFT JOIN является необязательной частью инструкции SELECT, которая появляется после предложения FROM.
Итак, в вашем примере:
SELECT * FROM Product
LEFT JOIN ProductDetails ON ProductDetails.product_id = Product.product_id
WHERE id=". $productid
Попробуйте использовать соединение:
SELECT p.*, pd.size
FROM Product p
INNER JOIN ProductDetails pd
ON p.id = pd.productid;
'select p.*, d.size from Product p join ProductDetails d using(id) where id=". $productid'.'";'