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

questionAnswers(1)

yourAnswerToTheQuestion