[英]How to connect two MySQL tables
我的MySqli數據庫中有一個稱為“產品”的表。
Products TABLE
product_id | INT primary KEY
product_name | VARCHAR(50)
product_price | float
從PHP,我以這種方式在表格產品中輸入行:
mysqli_query($con,"INSERT INTO products (product_id,product_name,product_price) VALUES
('$product_id','$product_name','$price')");
到目前為止,一切工作正常。 現在,我想要第二個表稱為“類別”,該表將包含產品可以具有的所有可能的類別
類別表必須具有category_id和category_name作為列
Category TABLE
category_id | INT primary KEY
category_name | VARCHAR(50)
我試圖找出一種方法來將產品與我的PHP文件中的類別相關聯
for example:
$get=mysqli_query($con, "SELECT * FROM `category`");
while ($row = mysqli_fetch_assoc($get)) {
echo $row['category_name']; //...here show all the categories
//...
//.. pick the category that the product belong
$category_Selected= .....;
}?>
..... And make the connection (with INSERT? or something) between product and category
我希望能夠在產品表上搜索時(對於產品X)也能顯示其所屬的類別(到目前為止,我可以顯示Product_id,product_name和product_price)
謝謝
如果產品只能屬於一個類別,則可以在“產品”表中添加一個category_id。
我建議第三張桌子:
Product_category
id | PK
product_id | Foreign key to Products.id
category_id| Foreign key to Categories.id
現在,每次插入產品時,還需要獲取類別的ID,並對Product_category表執行插入語句。
要檢索數據,您可以執行以下操作:
$get=mysqli_query($con, "SELECT * FROM `category`");
while ($row = mysqli_fetch_assoc($get)) {
echo $row['category_name']; //...here show all the categories
$products=mysqli_query($con, "SELECT * FROM `Products` WHERE id IN
(SELECT product_id from Product_category WHERE category_id= ".(int)$row['category_id'] . ")");
while ($product = mysqli_fetch_assoc($products)) {
echo $product["product_name"] . ", " . $product["product_price"];
}
}
上面的語句為例,您可以使用JOIN和prepared語句。
如果您選擇更改產品表並在其中添加category_id,則示例代碼如下:
$get=mysqli_query($con, "SELECT * FROM `category`");
while ($row = mysqli_fetch_assoc($get)) {
echo $row['category_name']; //...here show all the categories
$products=mysqli_query($con, "SELECT * FROM `Products` WHERE category_id = " . (int) $row["category_id"]);
while ($product = mysqli_fetch_assoc($products)) {
echo $product["product_name"] . ", " . $product["product_price"];
}
}
實際上,您的數據庫不允許您表示類別和產品之間的關系。 您將需要更改您的設計。
我可以想象一個產品屬於一個類別,而一個類別可以有多個產品。
如果是這樣,我建議您創建一個categories
表來存儲類別,並至少使用category_id
和category_name
列。
CREATE TABLE categories (
category_id INT PRIMARY KEY AUTO_INCREMENT,
category_name VARCHAR(100)
);
在產品表,要在增加一列products
,存儲到相應類別的ID的參考表:
ALTER TABLE products ADD
COLUMN category_id INT
FOREIGN KEY (category_fk) REFERENCES categories(id) ON DELETE CASCADE;
通過這種修改后的數據庫設計,當您插入products
,您傳遞了類別的引用(可以期望您的應用程序的用戶在創建產品時將從某種下拉列表中選擇它):
INSERT INTO products (product_id, product_name, product_price, category_id)
VALUES ( :product_id, :product_name, :price, :category_id );
當您想顯示產品及其類別名稱時,可以使用簡單的JOIN:
SELECT p.*, c.category_name
FROM products p
INNER JOIN categories c ON c.category_id = p.category_id
WHERE p.produt_id = :product_id
PS:永遠不要將POST
ed值傳遞給您的SQL查詢,如下所示:這會使您遭受SQL注入(並使查詢的可讀性和效率降低)。 我將查詢更改為使用命名參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.