Есть ли возможность создать базу столбцов таблицы на основе другого значения столбца таблицы?
существующая таблица (геозона) будет выглядеть так и не будет фиксированной (может содержать больше идентификатора и имени)
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 с идентификатором геозоны?
пример: shipping_cost_1, shipping_cost_2 и shipping_cost_3
Похоже, что стоимость доставки зависит от продукта и геозоны, в которую оно отправлено, что означает 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
Других решений пока нет …