2013-04-30 224 views
1

我正在創建一個電子商務商店,並在SQL數據庫中設置了購物車。我設法讓購物車工作,並在數據庫中設置了一些表格。我現在在使用不同尺寸的產品時遇到問題,例如襯衫將有3種不同的尺寸,每種尺碼也會有不同的價格。SQL從多個表中選擇數據

這裏是我的表是如何設置:

CREATE TABLE products(
     id int(11) NOT NULL auto_increment, 
     product_name varchar(255) NOT NULL, 
     price varchar(16) NOT NULL, 
     details text NOT NULL, 
     category varchar(16) NOT NULL, 
     subcategory varchar(16) NOT NULL, 
     date_added date NOT NULL, 
     PRIMARY KEY(id), 
     UNIQUE KEY product_name (product_name) 
     ) 

CREATE TABLE admin(
     id int(11) NOT NULL auto_increment, 
     username varchar(24) NOT NULL, 
     password varchar(24) NOT NULL, 
     last_log_date date NOT NULL, 
     PRIMARY KEY(id), 
     UNIQUE KEY username (username) 
     ) 

CREATE TABLE sizes(
        SizeID int(11) NOT NULL auto_increment, 
        id int(11) NOT NULL auto_increment, 
        Size varchar(24) NOT NULL, 
        Price varchar(6) NOT NULL, 
        PRIMARY KEY(sizeID), 
      UNIQUE KEY ID (ID) 

) 

我可以抓住從產品表,名稱,價格,類別等信息,但我會怎麼選擇尺寸表中的信息,以及產品表。這些信息必須匹配,所以表格必須由FK鏈接?

if(isset($_GET['id'])){ 
    $id = preg_replace('#[^0-9]#i', '', $_GET["id"]); 
    //use this var to check to see if this ID exists, if yes then get the product 
    //details, if no then ecit this script and give message why 
    $sql=mysql_query("SELECT*FROM products WHERE id='$id' LIMIT 1"); 
    $productCount=mysql_num_rows($sql);//count number of rows in sql variable 
    if($productCount>0){ 
     //get all product details 
     while($row=mysql_fetch_array($sql)){ 

     $id=$row["id"]; 
     $product_name=$row["product_name"]; 
     $price=$row["price"]; 
     $details=$row["details"]; 
     $category=$row["category"]; 
     $subcategory=$row["subcategory"]; 
     $date_added = strftime("%b %d %Y",strtotime($row["date_added"])); 
     //product_name, price, details, category, subcategory, date_added 
     } 
    }else{ 
      echo "This item does not exist."; 
      exit(); 
     } 
}else{ 
    echo "Data to render this page is missing."; 
    exit(); 
} 

這將從產品表中獲取數據,但我仍然需要尺寸表中的尺寸和價格,並且他們需要匹配物品ID。我將如何去做這件事?

+0

答案是「這個信息必須匹配,所以表必須由FK鏈接?」,是的。 – 2013-04-30 21:45:54

+0

我會建議查看PDO(http://php.net/manual/en/book.pdo.php)並準備特別爲做電子商務網站的報表。 – ewein 2013-04-30 21:56:33

+0

在一個表中不能有2個自動增量列。 – bksi 2013-04-30 22:18:09

回答

-2

選擇a.name,a.price,a.category,b.price,b.size從產品 ,大小B 其中a.id = b.id

所以你設置$ SQL來此查詢

+0

產品和尺寸表之間沒有關係。 – 2013-04-30 21:51:47

+0

我的錯誤 - 我看到id int(11)NOT NULL auto_increment n這兩個表定義,並認爲這是關係 – Chip 2013-04-30 21:54:13

+0

我做得更糟。 – 2013-04-30 21:55:20

1

我想你應該有一個更表(例如product_sizes):

CREATE TABLE product_sizes(
    product_id int(11), 
    size_id int(11) 
); 

而且該表將與您的尺寸連接您的產品。 在這種情況下,您的查詢將是這樣的:

SELECT p.*, s.Size, s.Price 
FROM products AS p, sizes AS s, product_sizes AS ps 
WHERE p.id=ps.product_id AND s.id=ps.size_id 
AND .... your additional conditions 

這是許多人在數據庫中多關係。

在這裏你可以瞭解這些關係的詳細信息:http://sqlrelationship.com/many-to-many-relationship/

+0

Ahh感覺就像我在Uni再次使用這個數據庫工作,現在它全部回到我身邊,謝謝,我會讓你知道它是怎麼回事。 – Chan 2013-04-30 22:28:12

+0

它看起來像每個產品(ID)將被映射到幾種尺寸(SizeID和ID) - 在這裏看起來一對多的關係是合理的 - 如果是服裝,例如,您不會將多個產品映射到大行襯衫 - 你只能匹配襯衫產品。 – Chip 2013-04-30 22:34:50

+0

該產品將銷售的植物營養素,每個品牌將有不同的尺寸和價格,例如l升成本25英鎊,5升成本50英鎊。這裏的一對多關係是否合理? – Chan 2013-04-30 23:46:55

2

從一個數據庫設計點,你可能要一個多到尺寸和產品之間的多對多關係。而且,如果尺寸影響價格,您需要將價格存儲在多對多表中。

此外,將價格存儲爲數字,而不是varchar。你可能想用它做數學。

+0

我原先存儲爲varchar而不是int,所以我可以使用十進制值,作爲數字存儲會更有意義我猜 – Chan 2013-04-30 22:29:33

+0

並非所有的數字都是整數。 – 2013-04-30 22:41:45