![](/img/trans.png)
[英]How do I update multiple tables using prepared statements with mySQLi?
[英]SQL how do I join two tables using prepared statements based on values found in an array
我有包含以下內容的表格產品:
product_id | name | category | img
1 car toy tcar.jpg
2 boat toy tboat.jpg
3 plane actual plane.jpg
我還有包含以下內容的表格產品:
product_id | size | price
1 large 5
2 small 3
2 medium 4
3 small 7
最后,我有一個名為 $products_in_cart 的多維數組,其鍵等於 product_id。 它存儲以下值:
Array ( [1] => Array ( [Quantity] => 1 [Size] => large) [2] => Array ( [Quantity] => 5 [Size] => medium ) )
我想內部加入產品和產品,然后獲取在數組 $products_in_cart 中找到的產品。 (所以我將根據 product_id($products_in_cart 中的鍵)以及大小來獲取)。 這必須使用准備好的語句來完成。
我設法使用這些語句獲取在 $products_in_cart 中找到的產品:
$array_to_question_marks = implode(',', array_fill(0, count($products_in_cart), '?'));
$stmt = $pdo->prepare('SELECT * FROM products WHERE product_id IN (' . $array_to_question_marks . ')');
$stmt->execute(array_keys($products_in_cart));
$products = $stmt->fetchAll(PDO::FETCH_ASSOC);
這給出了 output:
Array ( [0] => Array ( [product_id] => 1 [name] => car [category] => toy [img] => tcar.jpg) [1] => Array ( [product_id] => 2 [name] => boat [category] => toy [img] => tboat.jpg))
然而,我想要的是得到這個 output:
Array ( [0] => Array ( [product_id] => 1 [name] => car [category] => toy [img] => tcar.jpg [size] => large [price] => 5) [1] => Array ( [product_id] => 2 [name] => boat [category] => toy [img] => tboat.jpg [size] => medium [price] => 4))
我希望我應該在內部加入產品和產品,然后選擇那些 ID 和尺寸與 $products_in_cart 中的相匹配的產品。 但是我不知道如何做到這一點(准備好的陳述使我的過程變得復雜)。
對於我對問題的糟糕描述,我深表歉意,但我希望我設法做的事情的例子能說明問題,謝謝!
好吧,如果您想進行內部聯接,只需...進行內部聯接。 沒有人說你不能在准備好的聲明中做一個!
替換這一行
$stmt = $pdo->prepare('SELECT * FROM products WHERE product_id IN (' . $array_to_question_marks . ')');
有了這個(為了更清楚起見,我將它分成幾行):
$stmt = $pdo->prepare('SELECT * FROM products
INNER JOIN product
ON (products.product_id = product.product_id)
WHERE products.product_id IN (' . $array_to_question_marks . ')');
如果您願意,也可以使用“速記”版本:
$stmt = $pdo->prepare('SELECT * FROM products, product
WHERE products.product_id = product.product_id
AND products.product_id IN (' . $array_to_question_marks . ')');
作為旁注,使用兩個相似的命名表會造成混淆。 由於“產品”表包含尺碼和價格但沒有產品信息,您可以將其重命名為“prices_sizes”之類的名稱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.