У меня есть таблица, заполненная категориями, другая заполнена продуктами. Между ними у меня есть таблица категорий продуктов всего с 3 столбцами:
- id
- ид_категории
- идантификационный номер продукта
отлично работает для поиска продуктов в определенной категории:
LEFT JOIN `products-categories` pc ON p.id = pc.product_id
(p — это моя таблица продуктов.)
При поиске товаров в определенных категориях я просто использую:
WHERE pc.category_id IN (0,34,35,36,37,38,39,168)
но теперь, как я могу объединить пункты 2 категорий? Я хотел бы найти все продукты, представленные, скажем, в категориях 34 и 255.
Я не могу просто добавить «И ГДЕ», потому что это отношение будет в другой строке (для каждой результирующей строки есть только один идентификатор категории...
Пример:
product_id | category_id
1 22
1 34
1 47
2 34
2 65
2 255
2 313
3 22
Моя таблица продуктов просто выглядит «как-то так»:
id | name | price | ...
-----------------
1 fork 2.21
2 knife 3.55
Итак, что я пытаюсь сделать на простом английском языке:
Найти все продукты в категории 34, которые также отображаются в категории 255, это должно вернуть мне идентификатор продукта 2 (только один раз)
Делать это таким образом неправильно: (Это настоящий код)
SELECT DISTINCT `ref`,`spec_varc_titre_fr`,`price_sell`,`spec_bool_new`,`defaultmedia_id`
FROM `productmanager_products` p
LEFT JOIN `productmanager_products-categories` pc
ON p.id = pc.product_id
WHERE pc.category_id IN (0,34,35,36,37,38,39,168)
AND spec_varc_gender = 'F'
AND pc.category_id IN (0,255)
AND `price_sell` BETWEEN 1.27
AND 38.83
ORDER BY pc.ordering ASC
LIMIT 0,15;
потому что 34 и 255 находятся в разных строках, даже если это один и тот же продукт...