Selecione produtos por vários atributos, usando o concatenador AND ou OR, modelo de dados EAV
Tenho um problema com uma consulta para o filtro de produtos de sites de comércio eletrônico.
Eu tenho um modelo de dados EAV como este:
products [id, title....]
attributes [id, name]
attributes_entity [product_id, attribute_id, value_id]
attributes_values [id, value]
Minha consulta:
SELECT
products.id,
products.title
FROM
products
WHERE products.id IN
(
SELECT attributes_entity.product_id FROM attributes_entity INNER JOIN
attributes ON attributes_entity.attribute_id=attributes.id INNER JOIN
attributes_values ON attributes_entity.value_id=attributes_values.id
WHERE
(
(attributes.name="Memory" AND attributes_values.value="16GB")
>> AND
(attributes.name="Color" AND attributes_values.value="Gold")
)
)
AND products.category_id = :category_id
O problema é que quando estou usando as subconsultas >> AND entre (attribute.name = "Memory" AND attribute_values.value = "16GB"), recebo 0 resultados, mas quando estou usando OR, ele fornece mais resultados que eu preciso. não é relevante para essas 2 condições.
Por exemplo, quando recebo solicitação: "Memória = 16 GB e Cor = Preto". Espero obter iPhone 5 16BG preto, nem todos (ouro, cinza espacial etc.) iPhones com 16 GB
Estou procurando um exemplo de consulta, de preferência com a descrição de como funciona.
Atenciosamente, Anton