Я пытаюсь исправить запрос, используемый для фильтрации товаров, который отлично работает для одной категории, но очень ошибочен, когда выбрано несколько категорий. В настоящее время в запросе выбираются все продукты, чьи идентификаторы совпадают с одним cat_id ИЛИ другим, что является началом, но я не могу понять, как получить продукты, чьи идентификаторы совпадают ОБА, выбранные с номерами cat_id в category_linked.
Вот пример запроса, который в данный момент выполняется, когда выбраны два фильтра:
SELECT A.* FROM products A LEFT JOIN categories_linked B ON A.id = B.prod_id WHERE (B.cat_id = 1 || B.cat_id = 2) GROUP BY A.id;
Например, если бы я отфильтровал по cat_id 1 и 2, я хотел бы вернуть продукт с идентификатором 1, но в настоящее время он возвращает продукты с идентификаторами 1, 2 и 3. Предложение WHERE генерируется динамически, поэтому, если его можно поддерживать, даже лучше.
Categories_linked
cat_id|prod_id|
------+-------+
1| 1|
1| 2|
2| 1|
2| 3|
products
id |title |
---+------+
1| item1|
2| item2|
3| item3|