10.3.36-MariaDB
объясняю раскладывая все по буквам.
есть товар, который имеет несколько атрибутов, для примера возьмем 5 шт., они лежат все в одной таблице и имеют разные attribute_id, в запрос приходят 3 параметра, к примеру 200, 80, 15, пример записи в таблице
spoiler
product_id attribute_id text
1 10 200
2 10 230
3 10 200
1 12 80
2 12 80
3 12 80
1 15 15
2 15 13
3 15 15
1 80 Сони
2 80 Сони
3 80 Сони
1 90 66
2 90 60
3 90 71
по запросу нужно получить значение атрибута с attribute_id = 80 и с теми значениями которые еще пришли
то есть результат должен быть Сони и total = 2 так как всем условиям соответствует 2 товара, то есть товары с product_id 1 и 3
Вообще, в вашей задаче первым делом нужно правильно избавиться от distinct, чтобы правильно трактовать выбранные записи.
Как это сделать?
Считаем, что товарные item-ы имеют атрибут с id = 80 - по ним проходимся как по товарным записям. Все остальные id атрибутов используем как свойства записей - 10 - ширина, 12 - высота, 15 - диагональ.
Тогда запрос будет таким:
-- Тестовая выборка
with product_attribute as (select 1 product_id, 10 attribute_id, '200' text from dual union all
select 2, 10, '230' from dual union all
select 3, 10, '200' from dual union all
select 1, 12, '80' from dual union all
select 2, 12, '80' from dual union all
select 3, 12, '80' from dual union all
select 1, 15, '15' from dual union all
select 2, 15, '13' from dual union all
select 3, 15, '15' from dual union all
select 1, 80, 'Сони' from dual union all
select 2, 80, 'Сони' from dual union all
select 3, 80, 'Сони' from dual union all
select 1, 90, '66' from dual union all
select 2, 90, '60' from dual union all
select 3, 90, '71' from dual),
product as (select 1 product_id from dual union all
select 2 from dual union all
select 3 from dual
)
-- Сам запрос поиска
Select A.*,
count(*) over () cnt -- количество товаров в результате поиска
from (SELECT p.product_id,
-- далее, его свойства
(select pp.text from product_attribute pp where p.product_id = pp.product_id and pp.attribute_id = 80) product_name, -- наименование item-а
(select pp.text from product_attribute pp where p.product_id = pp.product_id and pp.attribute_id = 10) wdt,
(select pp.text from product_attribute pp where p.product_id = pp.product_id and pp.attribute_id = 12) hgt,
(select pp.text from product_attribute pp where p.product_id = pp.product_id and pp.attribute_id = 15) dia
FROM product p
) A
where 1 = 1
-- тут пишем поисковой довесок условий
and A.wdt = 200
and A.hgt = 80
and A.dia = 15
Результат будет:
product_id product_name wdt hgt dia cnt
1 Сони 200 80 15 2
3 Сони 200 80 15 2
2 строки, считайте их как угодно, например, через count(*) over ().