簡體   English   中英

如何連接兩個MySQL表

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

謝謝

您想加入表格。

在這里看看:

聯接表-w3schools

MySQL聯接表語法

如果產品只能屬於一個類別,則可以在“產品”表中添加一個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_idcategory_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.

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