2015-09-06 185 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 
相關問題