2014-01-16 50 views
3

我有一個表FIELD_LIST這樣的:鍵 - 值對,柱的每個鍵,鍵作爲的columnHeader

field_id|obj_id|field_key|field_content 
----------------------------------------  
    1 | 1 | 123 | Title_A 
    2 | 1 | 234 | IP_A 
    3 | 1 | 567 | DNS_A 
    4 | 2 | 123 | Title_B 
    5 | 2 | 456 | IP_B 
    6 | 2 | 789 | DNS_B 
    7 | 3 | 123 | Title_C 
    8 | 3 | 456 | IP_C 
    9 | 3 | 789 | DNS_C 

我需要的是這樣的:

obj_id |123 |456 |789 
----------------------------------------  
    1 |Title_A|IP_A |DNS_A 
    2 |Title_B|IP_B |DNS_B 
    3 |Title_C|IP_C |DNS_C 

我有幾個想法,如何實現這一點(創建新的表格或視圖,使用剪輯等)。不幸的是,我的SQL技能不是很專業,我不知道我是否正朝着正確的方向工作。

背景: mySql數據庫用於存儲有關網頁的信息。有一個'obj'表和一個'field_list'表。 'obj_id'是來自obj表的外鍵。 'field_id'是field_list的主鍵。

我設法得到看起來我想要的連接和分離器的東西,但不是許多列的結果。

如果沒有簡單的答案或者很多 - 也許有人可以讓我走向正確的方向。

請原諒我不好的英語和語法。這是我的第一個stackoverflow問題 - 我希望你對我有耐心。如果事情不明確,我會在明天修改我的問題。

THX!

+0

那麼有什麼疑問,你嘗試迄今爲止實現這一結果。你是否真的需要這種查詢本身的樞軸結果,或者你可以簡單地將結果讀入應用程序層的多維數組中? –

+1

MySQL自己並不支持這種EAV關係。我建議你在腳本中編譯你的表而不是你的SQL語句。 – ToBe

回答

3

你可以嘗試這樣的事情,但性能可能不完美......在搜索

這臺模型excells,而不是它的表列表示:

SELECT object_id, 
MAX(IF(field_key = 123, field_content, NULL)) AS col_123, 
MAX(IF(field_key = 234, field_content, NULL)) AS col_234, 
MAX(IF(field_key = 345, field_content, NULL)) AS col_345, 
MAX(IF(field_key = 456, field_content, NULL)) AS col_456, 
MAX(IF(field_key = 567, field_content, NULL)) AS col_567 
FROM field_list 
GROUP BY object_id 
+0

非常感謝,這確實是我需要或至少要求。我在SQL Fiddle中測試了你的查詢,它工作得很好[http://sqlfiddle.com/#!2/5e313/10/0]。我將盡力在明天的工作中解決我的問題。當我搜索到我的問題時,我發現了一些類似的東西,但該解決方案在我的數據庫中不起作用。我希望這能幫助我找出原因。非常感謝你! – Mutant

+0

sqlfiddle.com/#!2/5e313/10/0 – Mutant

+0

我想通了,這不符合我的phpmyadmin,但sql-workbench給我我正在尋找的結果。不知道爲什麼這不適用於我的phpmyadmin實例。但再次感謝這個快速而又好的答案! – Mutant