Доброго времени суток. Есть запрос Код (Text): SELECT * FROM products p WHERE ".join(' AND ', $join)." при выборе определенных значений в блоке фильтрации я получаю массив с параметрами для фильтрации Код (Text): Array ( [par] => Array ( [0] => 1 [1] => 1 ) [val] => Array ( [0] => 1 [1] => 2 ) ) par - это параметры, val - значения параметров. в данном случае par 1 -> val 1 par 1 -> val 2 par - это параметр Цвет val - Красный, Синий Перед запросом, который указан выше я составляю условия для выборки на основе получаемых данных. Просто как пример, для выборки по определенной категории товаров Код (Text): if (isset($get['category']) && is_numeric($get['category'])) { $join[] = " (categories_id = '".$get['category']."') "; } Т.е. если в гете приходит category, то фильтрую еще и по ней. Но вот столкнулся с проблемой. Суть этой фильтрации в том, чтобы находить товары по определенным параметрам, которые есть в каждом товаре. К примеру товар "Зонтик №1" - имеет цвета на выбор Красный, Синий. "Зонтик №2" - имеет цвета на выбор Красный. Условие которое я использую для выборки параметров Код (Text): if (isset($get['val'])) { if (is_array($get['val'])) { $join[] = " products_id IN ( SELECT product_id, value_id FROM product_to_param WHERE product_id = products_id AND value_id IN (".implode(',',$get['val']).") ) "; } } в implode(',',$get['val']) я получаю ID значений(цветов) через запятую для выборки по ним. Но проблема в том, что выводятся товары у которых совпадет да же одно из значений. А мне нужно выводить только те, у которых есть сразу ВСЕ значения указанные в $get['val']. Тупо застрял тут. не знаю что делать(
не очень понял, что меняет. результат одинаков. У меня в запросе получается, к примеру value_id IN (1,15) товара у которого есть значения с ID 15 нет, соответственно, вернуть нужно 0 Да же, если по другим значениям есть совпадения. А мне возвращает товары, у которых есть значение с ID 1. С одной стороны это то же не плохо. Но отсев нужен именно по привязанным сразу всем значениям, а не по любым совпадениям. Добавлено спустя 52 минуты 46 секунд: получилось. но уж очень наверное ресурсоемко будет. Код (Text): if (isset($get['val'])) { if (is_array($get['val'])) { foreach($get['val'] AS $k => $v) { $join[] = " products_id IN ( SELECT product_id, value_id FROM product_to_param WHERE product_id = products_id AND value_id IN (".$v.") ) "; } } } Можно как-то оптимизировать это?