2015-09-06 180 views
2

有没有可能在另一个表列值上创建表列? 现有的表(geozone)是这样的,它是不固定的(可以包含多个ID和名称)根据sql中的另一个表列值创建表列

id | name 
1 | UK 
2 | CANADA 
3 | JAPAN 

,我试图创建一个从PHP页面

mysql_query("CREATE TABLE shipping (
     `id` int(11) NOT NULL auto_increment, 
     `product_id` int(11) NOT NULL, 
     `shipping_cost` decimal(15,2) NOT NULL, 
     PRIMARY KEY (`id`), 
     UNIQUE KEY `id` (`id`) 
     )"); 

查询新以上创建航运表成功,但这不是我所需要的,我如何创建shipping_cost列有一个地理区域ID的ID?
例如:shipping_cost_1,shipping_cost_2和shipping_cost_3

+0

是的,它是可能的,但在运行时创建的表/列是糟糕的设计。 ** [查看我今天的答案](http://stackoverflow.com/questions/32422071/create-a-table-whos-name-must-be-a-primary-key-in-another-table/32422209#32422209 )** – lad2025

+0

它的唯一执行时只需点击安装(不需要解释),顺便说一句,我如何编写查询? –

+0

你有多少个航运区?也许一个糟糕的设计 – Drew

回答

0

这听起来像运输成本取决于产品,需要添加到您的shipping_cost表它发送到geozone,这意味着geozone_id列。同时在(geozone_id,product_id)上添加一个唯一约束,因为每个唯一对只应该有一个运费。

CREATE TABLE shipping (
    `id` int(11) NOT NULL auto_increment, 
    `geozone_id` int(11) NOT NULL, -- specify which geozone this cost is for 
    `product_id` int(11) NOT NULL, 
    `shipping_cost` decimal(15,2) NOT NULL, 
    PRIMARY KEY (`id`), 
    -- UNIQUE KEY `id` (`id`), -- Not necessary because Primary keys are already unique 
    UNIQUE KEY `product_id_geozone_id` (`product_id`,`geozone_id`) -- each product, geozone can only have 1 cost 
) 

然后你可以选择为每个产品/ geozone对成本联接:

select geozone.name, product.name, 
shipping.shipping_cost 
from products 
join shipping on shipping.product_id = product.id 
join geozone on shipping.geozone_id = geozone.id 
相关问题