В поисх ходил, но пока ничего не нашёл. Задача - сделать фильтр по товарам; поиск производится по нескольким (N) криетриям. Структура следующая: Каталог (К): treeID Товар (Т): goodID, goodTreeID, Свойста товаров (СТ): propID, goodID, ptypeID, propValue (TEXT) Типы свойств (ТС): ptypeID, ptypeTreeID, ptypeCaption, ptypeType Значения типов свойств (ЗТС): ptypeValueID, ptypeID, ptypeValue (ТЕХТ) Логика такая: 1. для каждой ветки каталога можно задавать индивидуальный набор свойств. 2. фильтр задумывается только для тех ТС, могут иметь несколько значений (ptypeType='select', пример — выпадающий список). На входе: 1. treeID, 2. typeID, ptypeValueID — в количистве N. Нюансы: а. Свойство товара (СТ) «незнает» id Значения типа свойта (ЗТС), и хранит только само значение. б. СТ знает только Тип свойства (ТС), значение которого оно хранит. Обращаюсь к братству кодеров да програмеров с просьбой помочь сформулировать sql запрос, ибо собственный мозг данную задачу самостоятельно осилить пока не может. Спасибо. upd. Вроде как рабочий код для фильтра по одному свойству: Код (Text): SELECT pv.*, gp.*, g.* FROM magazine_ptype_values as pv LEFT JOIN magazine_goods_prop as gp ON (pv.ptypeID = gp.ptypeID AND pv.ptypeValue = gp.propValue) JOIN magazine_goods as g ON (gp.goodID = g.goodID) WHERE g.goodTreeID=159 AND pv.ptypeID=40 AND pv.ptypeValueID=38 но как его переделать, что бы кол-во фильтров было плавающим?
так-с... мозг задачу вроде осилил. Вот рабочий вариант запроса: Код (Text): SELECT * FROM magazine_goods as g JOIN magazine_goods_prop as gp1 ON (gp1.goodID = g.goodID) JOIN magazine_ptype_values as pv1 ON (pv1.ptypeID = gp1.ptypeID AND pv1.ptypeValue = gp1.propValue AND pv1.ptypeID=30 AND pv1.ptypeValueID=29) JOIN magazine_goods_prop as gp2 ON (gp2.goodID = g.goodID) JOIN magazine_ptype_values as pv2 ON (pv2.ptypeID = gp2.ptypeID AND pv2.ptypeValue = gp2.propValue AND pv2.ptypeID=39 AND pv2.ptypeValueID=31) JOIN magazine_goods_prop as gp3 ON (gp3.goodID = g.goodID) JOIN magazine_ptype_values as pv3 ON (pv3.ptypeID = gp3.ptypeID AND pv3.ptypeValue = gp3.propValue AND pv3.ptypeID=40 AND pv3.ptypeValueID=34) WHERE g.goodTreeID=159 это для если три критерия на входе.