簡體   English   中英

SQL 我如何根據在數組中找到的值使用准備好的語句連接兩個表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM