Добрый день! Не могу поменять логику запроса, прошу помощи. Суть вот в чем: Есть запрос к базе, который формирует Opencart для выборки товаров с применением фильтров. Запрос целиком: Код (Text): SELECT DISTINCT SQL_CALC_FOUND_ROWS p.product_id, (SELECT AVG(rating) AS total FROM oc_review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating, (SELECT price FROM oc_product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '1' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < '2014-05-13 08:35:00') AND (pd2.date_end = '0000-00-00' OR pd2.date_end > '2014-05-13 08:35:00')) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT price FROM oc_product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '1' AND ((ps.date_start = '0000-00-00' OR ps.date_start < '2014-05-13 08:35:00') AND (ps.date_end = '0000-00-00' OR ps.date_end > '2014-05-13 08:35:00')) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special FROM oc_category_path cp LEFT JOIN oc_product_to_category p2c ON (cp.category_id = p2c.category_id) LEFT JOIN oc_product_filter pf ON (p2c.product_id = pf.product_id) LEFT JOIN oc_product p ON (pf.product_id = p.product_id) LEFT JOIN oc_product_description pd ON (p.product_id = pd.product_id) LEFT JOIN oc_product_to_store p2s ON (p.product_id = p2s.product_id) WHERE pd.language_id = '1' AND p.status = '1' AND p.date_available <= '2014-05-13 08:35:00' AND p2s.store_id = '0' AND cp.path_id = '1' AND pf.filter_id IN (11,3) AND (p.price >= "0" AND p.price <= "10000000") GROUP BY p.product_id ORDER BY p.sort_order ASC, LCASE(pd.name) ASC LIMIT 0,15 Нас интересует только вот эта часть: Код (Text): AND pf.filter_id IN (11,3) Как сделать чтобы выборка делалась с логикой "И", а не "ИЛИ"? Я пробовал заменить эту часть на: Код (Text): AND pf.filter_id IN (11) AND pf.filter_id IN (3) И так: Код (Text): AND pf.filter_id = 11 AND pf.filter_id = 3 Оба варианта не дают вообще результата. Помогите, разобраться.
что это значит? поле pf.filter_id не может быть равным ОДНОВРЕМЕННО И 3 И 5. вы чего вообще хотите сделать? опишите своими словами задачу начальную. а не то что вы начали неправильно делать.
Скриншот фильтров магазина: http://joxi.ru/jstxU_3JTJC_VNNPR7s Эти фильтры (11, 3) из разных групп. И при действующем алгоритме, при их выборе, товары из этих фильтров суммируются. Отбираются все браслеты и все белокрасные. А нужно, чтобы показывались белокрасные браслеты.
попробуйте так: после Код (PHP): LEFT JOIN oc_product_filter pf ON (p2c.product_id = pf.product_id) добавьте еще Код (PHP): LEFT JOIN oc_product_filter pf2 ON (p2c.product_id = pf2.product_id) и вместо Код (PHP): AND pf.filter_id IN (11,3) напишите Код (PHP): AND pf.filter_id IN (11) AND pf2.filter_id IN (3)
Спасибо большое! Похоже, это то что нужно. Сейчас реализую программную часть, для формирования таких запросов, и будет понятно, на сколько это решение универсальное. Отпишусь по результатам.
Не получилось написать сразу. Но лучше поздно, как говорится. Это решение оказалось действительно рабочее. Все работает именно так, как нужно. Спасибо еще раз!