создать столбец таблицы на основе другого значения столбца таблицы в 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 с идентификатором геозоны?
пример: shipping_cost_1, shipping_cost_2 и shipping_cost_3

2

Решение

Похоже, что стоимость доставки зависит от продукта и геозоны, в которую оно отправлено, что означает 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
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector