Спасибо большое! Для реализации фильтров каталога я иду в правильном направлении ? Или нужно все переосмыслить. Потому что используя IN выводятся товары в которых совпал только один фильтр из всех, а мне нужно сделать так, что бы совпадение было точное по какому то определенному фильтру
Ellik: Не совсем понятно, как организован ваш каталог. Обычно реализуется так:
entity (id, type, ...)
attribute (id, entity_type, ...)
value (id, entity_id, attribute_id, value ...)
В этом случае поиск нужного товара по атрибутам выглядит так:
SELECT `t`.`entity_id`
FROM `entity` AS `t`
JOIN `value` AS `t1` WHERE `t1`.`entity_id` = `t`.`id`
JOIN `value` AS `t2` WHERE `t2`.`entity_id` = `t`.`id`
...
JOIN `value` AS `tN` WHERE `t3`.`entity_id` = `t`.`id`
WHERE `t`.`type` = 'product'
AND `t1`.`attribute_id` = :attribute1 AND `t1`.`value` = :value1
AND `t2`.`attribute_id` = :attribute2 AND `t2`.`value` = :value2
...
AND `tN`.`attribute_id` = :attributeN AND `tN`.`value` = :valueN
</sql>
А если мне нужно SELECT entity_id FROM products WHERE value_id = '19' and (value_id = '2' OR value_id = '12'). Т.е выбрать id где совпадает точно 19 и один из двух 2 или 12?
sunrails: Нет. Просто я реализую фильтр товаров. И нужно сделать релевантность фильтров. Например не показывать все выбранные бренды и атрибут вес. А выбрать один бренд в котором совпадает вес.
С помощью IN я добился того, что выбираются все товары где совпадает хотя бы один фильтр. Помогите решить проблему, пожалуйста)
Вы кота Шредингера там ищете что ли? :) Ну не может value_id одновременно быть равным двум значениям.
Касаемо последнего коммента смогу помочь только посмотрев таблицы.
SELECT * FROM `eav_entities` as e
JOIN `products` as p ON e.entity_id = p.entity_id
WHERE p.attribute_id = AND p.value_id IN ()
Но такая организация EAV странная(