У меня есть две таблицы, продукты и категории. Продукт может быть в нескольких категориях.
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
Однако это приведет к тому, что элемент будет указан более одного раза, если он относится к нескольким категориям. Как объединить все категории только в одну строку?
Использование:
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