2011-12-13 69 views
1

我的當前查詢: -CONCAT字符串明智

select 
p.id as product_id, 
p.product_name, 
child.name as category_name, 
parent.name as parent_category_name 
from category child 
left join products p on FIND_IN_SET(child.id,p.category_ids) 
left join category parent on parent.id = child.parentid and parent.parentid = 0 
where p.id = 7 

當前結果: -

product_Id | product_name | category_name | parent_category_name 
    7   ponds   cream    chemical 
    7   ponds   medicine   chemical 
    7   ponds   powder    Ayurvedic 

現在我想通過產品ID和父/子類別應該是表演組以逗號分隔的格式,如「奶油,藥物,粉末」。所以在這裏記錄的數量將只有一個這樣的: -

預期結果: -

product_Id | product_name | category_name  | parent_category_name 
    7   ponds  cream,medicine,powder chemical,chemical,Ayurvedic 

我不知道它可以或不可以在MySQL查詢。

任何建議或想法將不勝感激。

非常感謝。

+0

只要你不關心組中concat的順序...爲了看到 - > http://stackoverflow.com/questions/995373/mysql-sort-group-concat值 – xQbert

回答

1

這將使用GROUP_CONCAT()和分組product_idproduct_name。由於現有查詢已經拉了必要的行和列,你只需要申請GROUP_CONCAT()並添加GROUP BY條款:

select 
    p.id as product_id, 
    p.product_name, 
    /* GROUP_CONCAT() */ 
    GROUP_CONCAT(DISTINCT child.name) as category_name, 
    GROUP_CONCAT(DISTINCT parent.name) as parent_category_name 
from category child 
    left join products p on FIND_IN_SET(child.id,p.category_ids) 
    left join category parent on parent.id = child.parentid and parent.parentid = 0 
where p.id = 7 
/* Add a GROUP BY clause */ 
GROUP BY 
    product_id, 
    product_name 
+0

謝謝尼斯,邁克爾:)而且我想刪除重複的值,如在parent_category_name中看到有化學是重複的,所以我只想列出'化學,阿育吠陀'? – Bajrang

+0

@ J.J。添加'DISTINCT'。往上看.. –

1

使用GROUP_CONCAT()這一點。

SELECT `product_Id`, GROUP_CONCAT(`category_name`) 
FROM ... 
GROUP BY `product_Id`