Forum Webscript.Ru

Общие => Базы данных => Тема начата: golden-den от 15 Июля 2007, 10:14:27

Название: объединение нескольких запросов с Nested sets
Отправлено: golden-den от 15 Июля 2007, 10:14:27
Есть структура Nested sets - каталог товаров.
На каждый товар цена зависит от еще одного параметра, т.е. цен у каждого товара много.
При выводе элементов каталога хочу сразу одним запросом находить цены (min и max), только выводить надо все товары и без цены тоже (цена есть не у всех элементов, да и элементов,отвечающих за названия групп не может быть цены)

талица price = {id, item_id, color_id, price}

запрос1  - вывод элементов каталога
select i.cid, d.title, d.type
from $table i, $tableData d
where i.cleft > $leftId and i.cright < $rightId and i.clevel=$level+1 and i.cid=d.cid
order by i.cleft

связь с таблицей Price по столбцу item_id (id товара из каталога)
Если делать объединение запросов,

select i.cid, d.title, d.type, min(p.price) as pmin, max(p.price) as pmax
from $table i, $tableData d, price p
where i.cleft > $leftId and i.cright < $rightId and i.clevel=$level+1 and i.cid=d.cid
and p.item_id=i.cid
group by i.cid
order by i.cleft

то на выходе ТОЛЬКО те строки, у которых в таблице есть цена. Пропадают сразу все товары без цены и названия групп.


Как сделать, чтобы для каждой строки первого запроса, находились (!если есть) min(price) max(price)?

Вариант для каждой строки длать Новый запрос в таблицу Price  не нравится
Название: объединение нескольких запросов с Nested sets
Отправлено: Макс от 16 Июля 2007, 12:02:02
Цитировать
golden-den:
то на выходе ТОЛЬКО те строки, у которых в таблице есть цена. Пропадают сразу все товары без цены и названия групп.

про названия групп не понял, но вообще такие проблемы решаются с помощь LEFT JOIN  (http://dev.mysql.com/doc/refman/5.0/en/join.html)
Примерно так
....
from $table i, $tableData d
left join price p ON p.item_id=i.cid
...
Название: объединение нескольких запросов с Nested sets
Отправлено: golden-den от 16 Июля 2007, 15:17:08
спасибо