2

誰かがこれを手伝ってくれることを本当に望んでいます。データを構造化するためのより良い方法があると確信していますが、時間の制約があるため、可能であれば現在の構造の解決策があることが理想的です。

次の構造の2つのテーブルがあります。

表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

基本的に、次の形式でテーブル2の行(uidに基づく)を含むテーブル1を返す必要があります。

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

これは可能ですか?オンラインで見ると、ピボットテーブルとクロス集計クエリに出くわしますが、間違っていない限り、それらは私が求めているものを達成できないようです。(私はおそらく笑です)。

誰もがこれのために与えることができるどんな助けにも感謝します。

マット

4

3 に答える 3

2

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

それについて批判されることもありますが、防御はそれが機能であって、欠陥ではないということです :-) ピボット クエリは、作成するものはデータベースの意味でのテーブルではないため、プレゼンテーション レイヤーに属します。そのため、データベースからデータを抽出するアプリケーション層に属しています。

于 2012-04-23T14:25:13.860 に答える
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で参照してください。

于 2012-04-23T17:21:53.343 に答える
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
于 2012-04-23T15:05:20.153 に答える