@Heinemann

Как получить одним запросом товар, его категории и фильтры?

Почти получил то что надо, но меня смущает количество join и в результате получаю дублирующие строки.
SELECT p.*, c.title as category_title, f.title as filter_title FROM products as p
JOIN product_category as pc ON p.id=pc.product_id
JOIN categories as c ON pc.category_id=c.id
JOIN product_filter as pf ON p.id=pf.product_id
JOIN filters as f ON pf.filter_id=f.id
WHERE p.id='2'
GROUP BY p.name, c.title, f.title


62da4c0737190239101259.png

Как составить запрос, чтобы дб мне выдал ответ, где дублирующие строки он будет заменять пустым значением?
И насколько мой подход вообще верен?
  • Вопрос задан
  • 73 просмотра
Решения вопроса 1
rozhnev
@rozhnev Куратор тега MySQL
Fullstack programmer, DBA, медленно, дорого
SELECT p.*, category_titles, filter_titles
FROM products as p
LEFT JOIN (
  	SELECT product_id, json_arrayagg(c.title) category_titles from  product_category as pc
	JOIN categories as c ON pc.category_id=c.id
  	GROUP BY product_id
) pc ON  p.id=pc.product_id
JOIN (
  	SELECT product_id, json_arrayagg(f.title) filter_titles 
  	FROM product_filter as pf
	JOIN filters as f ON pf.filter_id=f.id
  	GROUP BY product_id
) pf ON p.id=pf.product_id
WHERE p.id='2'


SQL online editor
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
402d
@402d
начинал с бейсика на УКНЦ в 1988
group_concat есть такая функция
GROUP_CONCAT(DISTINCT c.title ORDER BY c.title ASC SEPARATOR ' ') as category_title
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы