У меня есть таблицы:
- Продукты (id, title)
[1, «Старая машина»], [2, «Новая машина»], [3, «Машина будущего»])
- Атрибуты (идентификатор, имя)
[1, «бренд»], [2, «модель»], [3, «цвет»]
- Attribute_values (attribute_id, product_id, value)
[1, 1, «Тойота»], [1, 2, «Хонда»], [1, 3, «Форд»], [1, 3, «красный»], [2, 3, «белый» '], [3, 3,' красный ']
Я пробовал запрос:
select p.*, a.name as attribute_name, av.value as attribute_value from attributes as a
join attribute_values as av on a.id=av.attribute_id
join products as p on av.product_id=p.id
where
((a.name='brand' and av.value='toyota') or (a.name='color' and av.value='red'))
Это дает каждой строке, соответствующей условию или запросу.
Например:
- [id: 1, title: 'Old car', имя_атрибута: 'brand',
ATTRIBUTE_VALUE: 'Тойота']
- [id: 1, title: 'Old car', имя_атрибута: 'color',
ATTRIBUTE_VALUE: 'красный']
- [id: 3, title: 'Future car', имя_атрибута: 'color',
ATTRIBUTE_VALUE: 'красный']
Здесь найдены следующие результаты: «Старый автомобиль» и «Автомобиль будущего», но мне нужно «Старый автомобиль», а не «Автомобиль будущего».
Можно ли это сделать одним запросом?