2012-12-06 85 views
0

我有以下SQL表結構(表名「MY_TABLE」):組表並顯示等領域

**ID - USER_ID - FIELD_ID - VALUE** 

1 - 1 - 1 - letter a 

2 - 1 - 2 - letter b 

3 - 1 - 3 - letter c 

4 - 2 - 1 - letter a 

5 - 2 - 2 - letter b 

然後,我想在一個HTML表中顯示的結果如下所示:

**USER_ID - FIELD_ID1->value - FIELD_ID2->value - FIELD_ID3->value** 

1 - letter a - letter b - letter c 

2 - letter a - letter b 

Any takers ??謝謝:)

編輯:

這裏是一個小提琴: http://sqlfiddle.com/#!2/bd980/5

這是底部的表,我試圖從顯示的結果。

+0

你不能做到這樣,如果鍵的數量是不同的(你如何想象與不同數量的連續入口的表?)。你可以做一個數據透視表。 – sashkello

+0

主鍵是ID列。我應該爲「關鍵」列選擇​​一個不同的名稱。編輯。如果沒有數據在該sql單元格中,它是不是隻會在呈現的html中顯示空白空間? – user1452442

+0

是的,這將是'數據透視表'。 – sashkello

回答

0

這應該工作:

SELECT t.user_id, 
     MAX(IF(t.field_id = 1, t.value, NULL)) AS key1, 
     MAX(IF(t.field_id = 2, t.value, NULL)) AS key2, 
     MAX(IF(t.field_id = 3, t.value, NULL)) AS key3 
FROM my_table t 
GROUP BY t.user_id 
+0

如果沒有,請告訴我有什麼問題。 – sashkello

+0

絕對完美!你是男人!最後一個問題,我答應讓你一個人留下......我如何在HTML表格中迴應這個問題?類似...​​1​​Josh​​35我需要一個foreach循環和變量嗎?編輯:等等,我可能已經回答了我自己的問題。讓我弄一分鐘:) – user1452442

+0

以下是我正在使用的:http://pastebin.com/ugYDZwf9但是,我知道這是錯誤的;)非常感謝您的時間! – user1452442

0

您可以用手動旋轉做到這一點:

select user_id, 
     max(case when key = 1 then value end) as Key1, 
     max(case when key = 2 then value end) as Key2, 
     max(case when key = 3 then value end) as Key3 
from t 
group by user_id 

這應該在任何數據庫。

+0

超級快速...現在嘗試...一秒。 – user1452442

+0

沒有運氣。但是,謝謝你,戈登。我上面編輯了我的問題,並添加了一個小提琴的鏈接......如果這有幫助的話。 – user1452442