我有两张桌子,产品和类别。产品可以分为多个类别。
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
但是,如果该项目属于多个类别,则会导致该项目被多次列出。如何将所有类别归为一行?
答案 0 :(得分: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