isamitakata
Дата: 12.01.2013 00:52:07
Приветствую, появился вопрос по запросам.
Вот такая ситуация.
Имеется таблица `товары`
в ней находятся такие поля
`тип`,`натуральность`,`цвет`,` страна`
Например:
`тип`,`натуральность`,`цвет`,` страна`
Молоко, Натуральный, Белый, Россия
Молоко, Натуральный, Белый
Хлеб, Натуральный, Черный, Россия
Колбаса, Соя, Красная, Россия
Колбаса, Натуральный, Красная, США
И т.д, вообщем таких записей достаточно и все они разные, молока может быть много с разными данными или каких то данных не хватает, например цвета.
Выводим эти товары из базы. И теперь когда мы их вывели нам нужно получить цену, но чтобы цену не определять вручную, мы в админ панели сделали форму, в которой можно указать параметры товара.
И получается у нас вторая табличка , `цены`.
Она хранит в себе такие данные и имеет следующую структуру.
`цены`
`тип`,`натуральность`,`цвет`,` страна`, `цена`
Например:
Молоко, NULL , Белый, NULL , 10
Молоко, Натуральный, Белый, 15
NULL, Натуральный, Черный, NULL, 20
Колбаса, Соя, Красная, Россия, 5
Колбаса, Натуральный, NULL, США, 30
Колбаса, NULL, NULL, Россия, 50
Колбаса, Натуральный, NULL, Россия, 40
Выходит следующее, есть цены для колбасы которая натуральная и из США, ее цена 30, а вот есть просто запись колбаса из России, и для всей колбасы из России нам надо ставить цену 50, или колбаса натуральная из России, то цена 40.
Вообщем вот так, сделать такое ценообразование. Как такое вообще можно реализовать? Помогите люди добрые =)
javajdbc
Дата: 12.01.2013 01:17:33
isamitakata,
что-то типа такого, но проблема что система
не имеет однозначног ответа:
на входе всегда 4 параметра ,
допустим хоть один из нух не null-вой
p_type, p_nat, p_color, p_cntr
select *
from prices r
where
ifnull(r.type ,'same') = ifnull(p_type, ifnull(r.type,'same'))
and ifnull(r.nat ,'same') = ifnull(p_nat, ifnull(rr.nat,'same'))
and ifnull(r.color,'same') = ifnull(p_color, ifnull(r.color,'same'))
and ifnull(r.cntr ,'same') = ifnull(p_cntr, ifnull(r.cntr,'same'))
далее могут возникнуть проблемы.
Если на входе Колбаса, просто колбаса --
не понятна чья она -- кремлевская салями или
прошуто котто ? чью цену променить ---
севетские червонцы или итальенскую лиру?
или на входе 3 ненулевых параметра а есть все цены
которые попадают по паре параметров?
(параметры --- тоже что и данные из таблицы товаров,
все выше можно переписать как жоинты...)
d7i
Дата: 12.01.2013 16:03:21
Я, правда, MySQL совсем не знаю, но практически во всех СУБД есть функция типа
isnull(par1,par2,...), которая может выбирать не-null значение из списка параметров.
Вот подобную функцию и следует применять в тех случаях, когда требуется перебрать несколько значений, некоторые из которых могут быть null.
Кстати...
Для адекватной работы все таблицы должны иметь ключевое поле id (идентификатор типа integer).
Я не рекомендую построения таблиц без этого поля, так как такие таблицы практически
всегда становятся мусором. Использование типа char в качестве идентификационного
поля также не рекомендую.
Ну и т.п. и т.д.
Нужно внимательно изучать основы построения СУБД, и подобные проблемы никогда более
не будут возникать...