Почему запрос ничего не выводит?
SELECT
product.title,
stock,
price,
GROUP_CONCAT(p.title, ': ', pv.value SEPARATOR ', ') property_values
FROM product
INNER JOIN product_property_value pv ON pv.product_id = product.id
INNER JOIN property p ON p.id = pv.property_id
AND (p.code = 'color' AND pv.value = 'Красный')
AND (p.code = 'width' AND (pv.value = 4 OR pv.value = 5))
AND (p.code = 'height' AND pv.value = 5)
GROUP BY product.id;
Полный DDL с данными. Что я делаю не так? Пробовал и через ON и через WHERE, но ничего не выводит...
Ответы (1 шт):
Автор решения: teran
→ Ссылка
Можно, например, так.
SELECT pr.id
, pr.title
, GROUP_CONCAT(p.code, ': ', ppv.value separator ', ' ) AS props
FROM product_property_value AS ppv
INNER JOIN property AS p ON (
ppv.property_id = p.id
AND (
(p.code = 'color' AND ppv.value = 'Красный')
OR (p.code = 'width' AND (ppv.value = 4 OR ppv.value = 5))
OR (p.code = 'height' AND ppv.value = 5)
)
)
INNER JOIN product AS pr ON pr.id = ppv.product_id
GROUP BY pr.id, pr.title
HAVING count(pr.id) = 3;
выбираем все товары, совпадающие по каждому свойству, а потом после группировки оставляем только товары, где присутствуют все 3.