Нужна помощь с MySQL.
Я создаю интернет-магазин, и у меня возникают проблемы с фильтрацией результатов поиска с несколькими предложениями WHERE IN в одном столбце.
У меня есть таблицы shopitem, filter, filter_option и shopitem_option.
shopitem (товары с названием, описанием, ценой и т. д.)
id
title
price
фильтр (основные категории фильтров, такие как цвет, бренд, пол, размер и т. д.)
id
name
filter_option (параметры фильтра, такие как размеры (S, M, L), цвета (черный, белый) и т. д.)
id
name
filter_id (filter.id)
shopitem_option (связь между товарами и опциями)
id
shopitem_id (shopitem.id)
filter_id (filter.id)
filter_option_id (filter_option.id)
У меня есть такие вещи, как различные кроссовки Nike Air разного размера, цвета, пола и т. д.
Итак, в таблице shopitem_option у меня есть следующее:
id | shopitem_id | filter_id | filter_option_id
-----------------------------------------------------
1 | Nike Air | Color | black
2 | Nike Air | Color | white
3 | Nike Air | Size | 40
4 | Nike Air | Size | 41
5 | Nike Air | Size | 42
6 | Nike Air | Gender | man
Когда я создаю запрос MySQL, он должен быть примерно таким (в чистом SQL-запросе вместо «черный», «мужской» и т. д. есть идентификаторы поля filter_option.id)
SELECT shopitem.*
FROM shopitem
LEFT JOIN shopitem_option.shopitem_id = shopitem.id
WHERE
shopitem_option.filter_option_id IN (black) AND
shopitem_option.filter_option_id IN (41,42) AND
shopitem_option.filter_option_id IN (man)
Но это не работает. Если я ищу только 40-й размер или только черный цвет, будут возвращены все туфли 40-го размера или все туфли черного цвета. Но если я комбинирую фильтр для поиска элементов с черным цветом и размером 40, он возвращает пустые результаты запроса.
Таким образом, в основном пользователь может искать обувь ГДЕ цвета (черный ИЛИ белый) И размер (41 ИЛИ 42) И пол (мужской). Как я могу это сделать?