MySQL - отображение результатов подзапроса в одной строке

0

У меня есть две таблицы, продукты и категории. Продукт может быть в нескольких категориях.

product (<product_id>, name, desc, price)
category (<category_id>, slug, display_name)
product_category(<category_id>, <product_id>)

Продукт имеет отношение N: M к категории. Мне нужен запрос, который показывает категории продукта в одной строке, например

name           |   desc                           | categories
------------------------------------------------------------------
The One Ring     One ring to rule them all          Magical Item, Jewelry

Где магический предмет - это одна категория, а ювелирные изделия - другое (не настоящий пример жизни. Саурон не просит меня создать магазин).

Итак, я думаю:

SELECT name, desc, categories.display_name FROM product, category, 
category_product  WHERE product.product_id  = category_product.product_id AND
category_product.category_id = category.category_id

Однако это приведет к тому, что элемент будет указан более одного раза, если он относится к нескольким категориям. Как объединить все категории только в одну строку?

Теги:

1 ответ

2
Лучший ответ

Использование:

  SELECT p.name,
         p.desc,
         GROUP_CONCAT(c.display_name) AS categories
    FROM PRODUCT p
    JOIN PRODUCT_CATEGORY pc ON pc.product_id = p.product_id
    JOIN CATEGORY c ON c.category_id = pc.category_id
GROUP BY p.name, p.desc

Ещё вопросы

Сообщество Overcoder
Наверх
Меню