2011-12-13 24 views
1

私の現在のクエリ: -、連結文字列賢明

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

ただ、あまりにも長い間、あなたは、グループ連結での順序を気にしないよう...そのためsee--> http://stackoverflow.com/questions/995373/mysql-sort-group-concat値は – xQbert

答えて

1

これはGROUP_CONCAT()を使用してグループ化し、product_idproduct_nameでグループ化します。このため

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():既存のクエリが既に必要な列と行を引っ張るので、あなたはGROUP_CONCAT()を適用し、GROUP BY句を追加するだけで済みます。

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