根据sql中的另一个表列值创建表列

时间:2015-09-06 13:31:11

标签: php mysql sql create-table

是否有可能根据另一个表列值创建表列? 现有的表(geozone)看起来像这样,它不是固定的(可以包含更多的id和名称)

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为geozone ID?例如:shipping_cost_1,shipping_cost_2和shipping_cost_3

1 个答案:

答案 0 :(得分:0)

听起来运费过高取决于产品及其发送到的地理区域,这意味着需要将geozone_id列添加到您的shipping_cost表中。同时在(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
)

然后,您可以使用联接选择每个产品/地理区域对的成本:

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