array(1) { [0]=> array(3) { ["errno"]=> int(1064) ["sqlstate"]=> string(5) "42000" ["error"]=> string(227) "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') INNER JOIN `m_filters` f1 ON f1.PropValue=up1.PropValue AND f1.FType=' at line 15" } } string(3489) " SELECT DISTINCT g.NumOrder, g.ItemId, g.Nabor, g.FotoId, g.Local, g.Back, g.`Type`, g.`Typeua`, g.`Brand`, g.`Color`, g.`Colorua`, g.avail, s.cnt, s.size1, s.size2, g.`GoodNameTranslit`, g.`GoodNameTranslitua`, g.GoodName, g.GoodNameua, g.`GoodFotoName`, g.`GoodFotoNameua`, g.Model, g.price, g.detail_price, g.`minprice`, g.`action_price`, 1 AS discount, 1 AS discount2, 0 AS special_price, 0 AS special_price2, g.last_dt_otgr, IF(g.Nabor=1, (SELECT MinPropValue FROM `m_filters_sizes2` WHERE ItemId=g.`ItemId` AND Nabor=1 AND `PartNum`=1 AND FType IN (4, 5, 6, 7, 8) LIMIT 0, 1), (SELECT MinPropValue FROM `m_filters_sizes2` WHERE ItemId=g.`ItemId` AND Nabor=0 AND `PartNum`=0 AND FType IN (4, 5, 6, 7, 8) LIMIT 0, 1)) AS MinPropValue, IF(g.Nabor=1, (SELECT MinPropValue FROM `m_filters_sizes2` WHERE ItemId=g.`ItemId` AND Nabor=1 AND `PartNum`=2 AND FType IN (4, 5, 6, 7, 8) LIMIT 0, 1), 0) AS MinPropValue2 FROM m_main_table2 g /* весь товар */ INNER JOIN `m_goodscategory2` gc ON gc.ItemId=g.ItemId AND gc.IsNabor=g.Nabor AND gc.`CategoryId` = 32 INNER JOIN( SELECT up1.ItemId, up1.Nabor, COUNT(*) AS cnt, MIN(f1.FSite) AS size1, MIN(f2.FSite) AS size2 FROM `m_filters_sizes` up1 # cnt = 1 только если один размер верха соответствует одному размеру низа INNER JOIN `m_filters_sizes` dn2 ON dn2.ItemId=up1.ItemId AND dn2.Nabor=1 AND dn2.PartNum=2 AND ( ) INNER JOIN `m_filters` f1 ON f1.PropValue=up1.PropValue AND f1.FType=up1.FType INNER JOIN `m_filters` f2 ON f2.PropValue=dn2.PropValue AND f2.FType=dn2.FType WHERE up1.Nabor=1 AND up1.`PartNum`=1 AND ( (up1.FType=12 AND up1.MinPropValue IN (2))) # задаем только фильтры, доступные для данной категории GROUP BY up1.ItemId, up1.Nabor # это чтобы определить количества в урезанных размерами UNION SELECT up1.ItemId, up1.Nabor, COUNT(*) AS cnt, MIN(f1.FSite) AS size1, '' AS size2 FROM `m_filters_sizes` up1 # cnt = 1 только если один размер верха соответствует одному размеру низа INNER JOIN `m_filters` f1 ON f1.PropValue=up1.PropValue AND f1.FType=up1.FType WHERE up1.Nabor=0 AND up1.`PartNum`=0 AND (( (up1.FType=12 AND up1.MinPropValue IN (2))) # задаем только фильтры, доступные для данной категории, один из этого точно будет OR ( )) # для товара используем оба фильтра GROUP BY up1.ItemId, up1.Nabor # это чтобы определить количества в урезанных размерами ) s ON s.ItemId=g.ItemId AND s.Nabor=g.Nabor WHERE ( g.colorId IN /* атрибутивными фильтрами - цветом */ ( SELECT PropValue FROM m_filters2 WHERE FType=9 AND FSite IN (SELECT FSite FROM m_filters2 WHERE FType=9 AND MinPropValue IN (2)) ) OR g.colorId=0 /* атрибутивными фильтрами - отсутствием цвета */ ) ORDER BY g.avail ASC, g.last_dt_otgr DESC"