1

我正在创建一个使用购物车设置的 SQL 数据库的电子商务商店。我设法让购物车工作并在数据库中设置了一些表。我现在对不同尺寸的产品有疑问,例如衬衫有 3 种不同的尺寸,每种尺寸的价格也不同。

以下是我的表的设置方式:

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。我该怎么做呢?

4

3 回答 3

2

从数据库设计的角度来看,您可能需要尺寸和产品之间的多对多关系。而且,如果大小影响价格,您需要将价格存储在多对多表中。

此外,将价格存储为数字,而不是 varchar。你可能想用它做数学。

于 2013-04-30T21:54:48.460 回答
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/

于 2013-04-30T21:54:05.380 回答
-2

从产品 a、尺寸 b 中选择 a.name、a.price、a.category、b.price、b.size 其中 a.id = b.id

所以你将 $sql 设置为这个查询

于 2013-04-30T21:47:17.880 回答