1

私はこれに非常に似た問題を抱えています: MySQLエンティティ-属性-値スキーマ またはこれ
をピボットする方法SQLを介した組み合わせの列挙

私は2つのテーブルを持っています:

バリエーション

ID | item_id | name
=================================
 1 | 1       | color
 2 | 1       | size
 3 | 1       | material
 4 | 1       | lenght
==================================

バリエーションデータ

ID | variation_id | value
=================================
 1 | 1            | red
 2 | 1            | white
 3 | 1            | black
 4 | 2            | s
 5 | 2            | m
 6 | 3            | cotton
 7 | 4            | 100
==================================


名前と値はユーザー入力です。
アイテムごとに最大4つのバリエーションがあり、バリエーションごとにn個の値があります。

いくつかのテストデータ

CREATE TABLE variations ( id int PRIMARY KEY, item_id int, name varchar(50));
INSERT INTO variations (id, item_id, name) 
VALUES (1, 1, 'color'),
       (2, 1, 'size'),
       (3, 1, 'material'),
       (4, 1, 'length');

CREATE TABLE variation_data ( id int PRIMARY KEY, variation_id int, val varchar(50));
INSERT INTO variation_data (id, variation_id, value) VALUES
  (1, 1, 'red'),
  (2, 1, 'white'),
  (3, 1, 'black'),
  (4, 2, 's'),
  (5, 2, 'm'),
  (6, 3, 'cotton'),
  (7, 4, '100');

望ましい結果:

red     S   cotton  100
red     M   cotton  100
white   S   cotton  100
white   M   cotton  100
black   S   cotton  100
black   M   cotton  100


残念ながら、私はこの問題を解決することができません。
ヒントを教えていただければ幸いです。

ご協力ありがとうございました!

4

1 に答える 1

0

このクエリを提案できます-

SELECT v.item_id,
  GROUP_CONCAT(IF(v.name = 'color', vd.val, NULL)) color,
  GROUP_CONCAT(IF(v.name = 'size', vd.val, NULL)) size,
  GROUP_CONCAT(IF(v.name = 'material', vd.val, NULL)) material,
  GROUP_CONCAT(IF(v.name = 'length', vd.val, NULL)) length
FROM variations v
  JOIN variation_data vd
    ON vd.variation_id = v.id
GROUP BY v.item_id

望ましい結果は返されませんが、「ピボット」は実行されます。

于 2012-08-31T06:02:52.073 に答える