2016-10-20 5 views
1

私の質問はちょっと変わっていますが、私は可能な限り明確にしようとします。relation bw mysqlのgroup_concatedカラム

products_table 
     ID | code | product_variants_id | product_name | variants  | variants_value 
     1 |  1| 123451    | beer cake | color  | blue 
     2 |  1| 123451    | beer cake | temperature | cold 
     3 |  1| 123451    | beer cake | weight  | 0.5 
     4 |  2| 123453    | ad wrap  | color  | green 
     5 |  2| 123453    | ad wrap  | weight  | 1 

これは私の最終製品テーブルの外観です。これは製品を表示するためのものです。これが私のやり方です。

SELECT xx.code, GROUP_CONCAT(xx.variants) AS variants, 
     GROUP_CONCAT(xx.variants_value) AS variants_value , 
     xx.product_name, xx.product_variants_id 
FROM products_table xx 
GROUP BY xx.product_variants_id 

は、このクエリの後、私のテーブルには、今、私は単純に、このテーブルを介して実行し、製品を一つずつ取得し、それがバリアントをだ表示することができ、この

 code | product_variants_id | product_name | variants    | variants_value 
     1 | 123451    | beer cake | color,temperature,weight| blue,cold,0.5 
     2 | 123453    | ad wrap  | color,weight   | green,1 

ようになります。

私の本当の疑問は、ちょうど私が得たこれらの連結結果をリンクする方法はありますか?

例:サーバ側の 私はcolorという変形を得ることができますが、colorの対応する値はどのように取得できますか?

私のアプローチは何ですか?

答えて

3

を連結バリアントと対応する値を持つことになります。

SELECT xx.code, GROUP_CONCAT(concat(xx.variants,':',xx.variants_value)) AS variants_and_values, xx.product_name, xx.product_variants_id 
FROM products_table xx 
GROUP BY xx.product_variants_id, xx.product_name, xx.code 
+0

それは創造的です。私は本当に感動しています。 –

1

たとえば、結果データを取得して繰り返し実行することができます。

PHPの実装:

foreach ($data as $key => $item) { 
    $data[$key]['variants'] = explode(',', $item['variants']); 
    $data[$key]['variants_value'] = explode(',', $item['variants_value']); 
} 

ので、あなたがgroup_concat()を行い、その後、最初に一緒に$data[$key]['variants'][0]保持カラーと$data[$key]['variants_value'][0]その値を保持する

+0

SQLソリューションはありませんか? –

+0

OPは、どのプログラミング言語がアプリケーションに使用されているかを示していません。 – Shadow

+0

はい、あなたはかなり正しいです。 – krasipenkov