2012-04-23 12 views
2

本当に誰かがこれを助けることを願っています。私はデータを構造化するより良い方法があると確信していますが、時間的制約のために、可能であれば現在の構造を解決することが理想的です。MySQL - あるテーブルの行を別のテーブルの列として結合する

Iは、以下の構造を有する2つのテーブルた:基本的に、私は(表2の行と表1を返すように

表1

id field1 
1 quest1 
2 quest2 
3 quest3 

表2

id uid quest1 quest2 quest3 
1 18 yes  no  yes 
2 27 yes  no  no 

が必要uidに基づく)を次の形式で入力します。

id field1 field2 
1 quest1 yes 
2 quest2 no 
3 quest3 yes 

これはまったく可能ですか?オンラインで見る私はピボットテーブルとクロス集計クエリーを続けていますが、私が間違っていない限り、後のことを達成することはできません。 (私はおそらく笑)。

誰にでも助けてもらえるお手伝いがあります。

マット

+0

出力のfield2がどこから来るのか、table1のidと一致するuid値がない場合、どのようにuidに結合するのかはわかりません。 – RedFilter

+0

混乱して申し訳ありません。フィールド2は理論的にテーブル2の行の1つで、本質的にWHID = '18'です。これは役に立ちますか? –

+0

@eggyalはあなたの解決策に感謝していますが、実際に答えが得られなかったのですが、これは私が後になったことを人々が理解するのではなく、質問の説明になりました。しかし、私が何をしようとしているのかを見た後、正方形のブロックを丸い穴に合わせようと思っていたように思えたので、データを別々の配列に格納し、この全部はCodeIgniterを使ったPHPプロジェクトの一部ですが、あなたの答えはありがたいです。実際に何かを学んだのは大変感謝しています –

答えて

2

MySQLは、ピボットテーブル/クロス集計クエリをサポートしていません。

フィリップスのクエリはプレゼンテーション層に多く属しています。なぜなら、作成するものはデータベースセンスの表ではないからです。したがって、それらはデータベースからデータを抽出するアプリケーションレイヤーにもっと属します。

0
select t1.id, t2.field1, t2.field2 
from table1 t1 
inner join (
    select id, 'quest1' as field1, quest1 as field2 from table2 
    union all 
    select id, 'quest2' as field1, quest2 as field2 from table2 
    union all 
    select id, 'quest3' as field1, quest3 as field2 from table2 
) t2u on t1.id = t2.id 
where t2.uid = 18 
1
SELECT t1.*, CASE t1.field1 
    WHEN 'quest1' THEN t2.quest1 
    WHEN 'quest2' THEN t2.quest2 
    WHEN 'quest3' THEN t2.quest3 
END AS field2 
FROM t1, t2 
WHERE t2.uid = 18; 

sqlfiddleでそれを参照してください。

関連する問題