Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Помогите с хитрым запросом. Весь мозг порушил (Aлексей) 22/06/2009 - 14:04:57
      Re: Помогите с хитрым запросом. Весь мозг порушил (PeaceCoder) 25/06/2009 - 22:15:12



From: Aлексей - 22/06/2009 - 14:04:57
Subject:Помогите с хитрым запросом. Весь мозг порушил
-----------------
Добрый день.
Имеется таблица goods. В ней хранятся списки товаров. Из этой таблицы нужно сделать выборку определенных полей таким вот образом:
SELECT gid, gname FROM goods WHERE bid=$bid LIMIT $startpos, $maxperpage
Поле bid - идентификатор родительского каталога (связь многие к одному).

Далее, имеется таблица prop и в ней присутствуют следующие поля:
CREATE TABLE IF NOT EXISTS `properties` (
`id` int(11) NOT NULL auto_increment,
`parent_id` int(11) NOT NULL default '0',
`type_id` int(11) NOT NULL,
`gid` int(11) NOT NULL,
`value` text NOT NULL,
PRIMARY KEY (`id`)
)
Так, каждой записи в таблице goods может соответствовать несколько записей из таблицы prop, но это не все. Поле prop.parent_id указывает на ID родительского атрибута, то есть структура атрибутов хранится в виде дерева: каждому атрибуту prop.id могут соответствовать свои атрибуты. Если parent_id=NULL, значит это "корневой" атрибут и он принадлежит непосредственно товару из таблицы goods.

Поясню на примере. Вот как хранятся артибуты для одного из товаров:

INSERT INTO `prop` (`id`, `parent_id`, `type_id`, `gid`, `value`) VALUES
(1, 0, 1, 795, 'man'),
(2, 1, 2, 795, '3400'),
(7, 1, 3, 795, 'blue'),
(8, 1, 3, 795, 'black'),
(10, 0, 1, 795, 'woman'),
(11, 10, 2, 795, '4000'),
(12, 10, 3, 795, 'red'),
(13, 10, 3, 795, 'yellow'),
(14, 10, 3, 795, 'white'),
(15, 10, 3, 795, 'orange'),
(16, 10, 3, 795, 'blue'),
(17, 10, 3, 795, 'black')
Поле type_id указывает на тип атрибуты. Здесь 1 - пол, 2 - цена и 3 - цвет. Здесь товар goods.gid=795 бывает для девочек и для мальчиков, мужские джинсы стоят 3400 и бывают синие и черные. Женские стоят 4000 и бывают сами видите какие.

Теперь перехожу к сути вопроса =) Как мне сделать такой запрос, чтобы для всех товаров, которые выберутся по условию goods.bid=$bid, выбирались данные по цене и по цветам. Причем, как видите, одному товару может соответствовать 2 (иногда и больше) цены - нужна минимальная из них (или, на худой конец, первая в записи). И может быть несколько цветов, нужно выбрать все возможные, но так, чтобы они не дублировались.
И можно ли вообще выцепить все эти данные в рамках одного-единственного запроса?

Пока я решил вопрос таким образом, что сначала я делаю просто выборку всех товаров по bid и потом в цикле для каждого из них гоняю отдельный запрос в таблицу prop. Все работает, но очень тормозит.

Помогите, плиз. Спасибо за внимание и потраченное время.


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
35800



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |