2011-12-13 91 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`