2010-09-14 64 views
0

我有兩個表,產品和類別。一個產品可以有多個類別。MySQL - 在單行中顯示子查詢的結果

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 

哪裏魔法物品是一類,珠寶是另一個(不是現實生活中的例子。索倫是不是問我設置up shop)。

所以我想到的是:

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 

然而,這將導致該項目被列不止一次,如果它屬於多個類別。如何將所有類別合併成一行?

回答

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