2017-06-14 15 views
0

を達成、私はこのクエリを持ってネストされたGROUP_CONCAT

Id | price | variety 
1 | 1000 | [ {color:FFFFFF, sizeName:XL} , {color:FFFFFF, sizeName:X} ] 

しかし、私の所望の出力は次のようになります。

Id | price | variety 
1 | 1000 | [ {color:FFFFFF, sizes: [ {sizeName: XL} , {sizeName: L} ] } ] 

質問:希望の出力を得るために、このコンテキストまたは他の関数(JSON関数以外)でgroup_concatを使用するにはどうすればよいですか?

+0

製品1に複数の色がある場合、どのような出力が得られますか? – Uueerdo

+0

[{color:FFFFFF、サイズ:[{sizeName:XL}、{sizeName:L}}}、{color:F2F2F2、サイズ:[{sizeName:XL}]}] – Sajad

+0

これは、フィールド値? – Uueerdo

答えて

2

ほとんどの場合、ネスト集約が必要な結果には「ネスト」クエリが必要です。外側のグループ化ディメンションにグループ化されたサブクエリと、外側のクエリでグループ化されるフィールドは、「サイズリスト」となります。外部クエリ集約では、「サイズリスト」が連結されたフィールドが集計されます。

このようなものですが、読みやすさのために余分なCONCATを省略しました。

SELECT subQ.id, subQ.price 
    , GROUP_CONCAT(CONCAT(subQ.color, ': ', subQ.sizeList)) AS variety 
FROM (
    SELECT p.id, p.price, pc.color 
     , GROUP_CONCAT(cs.size_name) AS sizeList 
    FROM tbl_products AS p 
    INNER JOIN tbl_product_colors AS pc ON p.id = pc.product_id 
    LEFT JOIN tbl_color_sizes AS cs ON pc.id = cs.product_color_id 
    GROUP BY p.id, p.price, pc.color 
) AS subQ 
GROUP BY subQ.id, subQ.price 
;