SQL从多个表中选择数据

时间:2013-04-30 21:43:32

标签: php mysql sql

我正在创建一个电子商务商店,其中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。我该怎么做呢?

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分: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/

答案 2 :(得分:-2)

选择a.name,a.price,a.category,b.price,b.size 来自产品a,尺寸b 其中a.id = b.id

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