Связывание таблиц

Slon747

Новичок
Связывание таблиц

MySQL 5.0.77

Не смог в теме четко указать суть вопроса.
Ситуация такая.
Есть магазин и несколько типов цен (розничная, оптовая и пр).
Тип цены (PriceType) для покупателя определяется исходя из вида товара (GroupItem).
В случае, если покупатель находится в определеной группе товара (вид товара заведомо известен), всё просто.
Зная вид товара, я соединяю товар с ценами с наложением условия на PriceType:
PHP:
SELECT
  items.*, Price
FROM
  items
  INNER JOIN prices ON prices.Item = items.id AND PriceType=2
WHERE
  items.Parent = 176
Но в некоторых случаях нужно показать товар сразу нескольких видов.
Как быть в таком случае?
Не хочется для каждой позиции товара выполнять отдельный запрос.
Можно ли как-то элегантнее решить эту задачу?

PHP:
CREATE TABLE items(
  Id VARCHAR(32) DEFAULT '0',
  GroupItem SMALLINT(6) NOT NULL,
  Parent INT(11) NOT NULL,
  PRIMARY KEY (Id)
)


CREATE TABLE prices(
  Id INT(6) UNSIGNED NOT NULL AUTO_INCREMENT,
  PriceType INT(4) NOT NULL DEFAULT 0,
  Item CHAR(32) NOT NULL DEFAULT '0',
  Price DOUBLE (9, 2) NOT NULL DEFAULT 0.00,
  PRIMARY KEY (Id)
)

CREATE TABLE price_politics(
  Id INT(11) NOT NULL AUTO_INCREMENT,
  Customer CHAR(32) NOT NULL,
  GroupItem SMALLINT(6) NOT NULL,
  PriceType SMALLINT(6) NOT NULL,
  PRIMARY KEY (Id)
)
Таблица `items` - номенклатура (GroupItem - тип товара).
Таблица `prices` - цены (PriceType - тип цены, Item-ссылка товара, Price-цена)
Таблица `price_politics` - условия цены для покупателя (Customer-ссылка покупателя, GroupItem - вид товара, PriceType-тип цены).
 

Gas

может по одной?
получить товары у которых GroupItem одинаковый? Приджойнить таблицу items к себе ещё раз.
Стоит добавить индкесов, ну хотя бы на поле Parent, да и Price DOUBLE я бы сменил на DECIMAL
 

Slon747

Новичок
Нет. Нужно получить товары с ценой.
У меня проблема в том, что цена для покупателя зависит от типа цен (розничная и пр.). А тип цены зависти от вида товара.
Т.е. книги этому покупателю должны продаваться по розничной, канцтовары - по оптовой и пр.
Заранее зная вид товара (допустим, находясь в иерархии), можно связать и наложить устловие на PriceType, как я указал выше.
Но что делать, если требуется выводить множество товара разного вида?
Тогда в зависимости от вида товара нужно накладывать разное условие на PriceType. Но как избавиться от цикла и вывести товар с ценой сразу?
 

prolis

Новичок
[sql]
select * ftrom items i, prices p, price_politics pp
where p.Item = i.id
and pp.GroupItem=i.GroupItem
and pp.PriceType=p.PriceType
[/sql]
 

Gas

может по одной?
может я опять что-то не так пнял, но что мешает сделать 3 джойна?

items i
JOIN price_politics pp ON i.GroupItem=pp.GroupItem AND pp.Customer=?
JOIN prices p ON p.Item=pp.I.Id AND p.PriceType=pp.PriceType

[update]
пока вникал в суть вопроса, prolis уже и ответ дал )
 
Сверху