2014-09-23 136 views
0

我有這種情況,但我無法解決它。動態查詢MySQL

結構DB:

表ELEMENTI

id | idElemento | idTipo 
1 | 1   | 1 

表踢被

id | Tipo 
1 | Persona 

表Valori

id | idElemento | idInfo | Valore 
1 | 1   | 1  | Mario 
1 | 1   | 2  | Rossi 
1 | 1   | 3  | 0810000000 
1 | 1   | 3  | 3330000000 

表信息

id | Info  | Multi 
1 | Nome  | 0 
1 | Cognome | 0 
1 | Telefono | 1 

期望的結果:

idElemento | Nome | Cognome | Telefono | 
1   | Mario | Rossi | 0810000000, 3330000000 | 
+0

歡迎來到Stackoverflow。你能解釋一下你的問題嗎?請相應地更新您的問題。 – kkuilla 2014-09-23 10:09:46

+0

我認爲Info表中有一個錯誤,它們是相同的,好像它們應該是1,2,3 – 2014-09-23 10:25:40

回答

0

亞歷山大評論的,信息表必須有一個增量字段(1,2,3)相對於所述信息。

您可以結合使用group_concat功能的Telfono。

因爲,你想基本上從表info填充字段。這涉及transpose table concept:

SELECT idelemento 
    ,max(CASE 
      WHEN t1.info = 'Nome' 
       THEN t1.value 
      ELSE NULL 
      END) AS Nome 
    ,max(CASE 
      WHEN t1.info = 'Cognome' 
       THEN t1.value 
      ELSE NULL 
      END) AS Cognome 
    ,max(CASE 
      WHEN t1.info = 'Telefono' 
       THEN t1.value 
      ELSE NULL 
      END) AS Telefono 
FROM (
    SELECT idElemento 
     ,info.info 
     ,group_concat(valore separator ', ') value 
    FROM valori 
    INNER JOIN info ON info.id = valori.idInfo 
    GROUP BY idInfo 
    ) t1; 

內部查詢恰好給出了相同的結果,而不轉置的數據。但是,我不知道爲什麼你需要填寫表info的字段。但在這裏你去:

SQLFiddle