Я создаю фильтр товаров для интернет-магазина.У меня есть таблица продуктов, таблица характеристик и таблица, в которой я храню product_id, характеристика_идентификатора и одно значение фильтра.
shop_products - идентификатор, имя
shop_characteristics - идентификатор, значения (json)
shop_values - идентификатор продукта, характеристический_идентификатор, значение
Я могу создать запрос, чтобы получить все продукты по одному значениювот так:
SELECT `p`.* FROM `shop_products` `p`
LEFT JOIN `shop_values` `fv` ON `p`.`id` = `fv`.`product_id`
WHERE ((`fv`.`characteristic_id`=3) AND (`fv`.`value`='outdoor'))
Работает нормально.Кроме того, я могу изменить этот запрос и получить все продукты по нескольким значениям, которые принадлежат к одной и той же группе характеристик (имеют идентичный идентификатор_идентификации), например:
SELECT `p`.* FROM `shop_products` `p`
LEFT JOIN `shop_values` `fv` ON `p`.`id` = `fv`.`product_id`
WHERE ((`fv`.`characteristic_id`=3) AND (`fv`.`value`='outdoor'))
OR ((`fv`.`characteristic_id`=3) AND (`fv`.`value`='indoor'))
, но при попытке создать запрос для несколькихусловия с различными характеристиками_идентификатора я ничего не получаю
SELECT `p`.* FROM `shop_products` `p`
LEFT JOIN `shop_values` `fv` ON `p`.`id` = `fv`.`product_id`
WHERE ((`fv`.`characteristic_id`=3) AND (`fv`.`value`='outdoor'))
AND ((`fv`.`characteristic_id`=5) AND (`fv`.`value`='white'))
Полагаю, это не работает из-за оператора AND, который в этом случае используется неправильно, поскольку в таблице shop_values нет записей, которыеимеют оба характеристики: 3 и 5.
Поэтому мой вопрос состоит в том, как объединить или изменить мой запрос, чтобы получить все связанные продукты, или, возможно, это недостаток для хранения таких данных, и мне нужно создать другой вид shop_values таблица?