2011-04-05 68 views
0

我有一個MySQL表:結合MySQL表的第1列與其他所有列(的cols A,B,C,d變得AB,AC,AD)

----------------------------------------------------------- 
time  |  host  |  var1  |  var2 .... 
20110101 |  hostA |  7  |  8  .... 
20110102 |  hostB |  2  |  3  .... 
20110102 |  hostA |  4  |  2  .... 
20110103 |  hostC |  9  |  9  .... 
20110104 |  hostC |  1  |  1  .... 
20110104 |  hostA |  10  |  2  .... 
.... etc ...... 
----------------------------------------------------------- 

,我想創建新表每個變量(VAR1,VAR2,VAR3等),看起來像(用於VAR1):

----------------------------------------------------------- 
time  | hostA-var1 | hostB-var1 | hostC-var1 
20110101 |  7  |  null  |  null .... 
20110102 |  4  |  2  |  null .... 
20110103 |  null  |  null  |  9  .... 
20110104 |  10  |  null  |  1  .... 
.... etc ...... 
----------------------------------------------------------- 

原始表是相當大,因此性能是一個問題。我對mysql不是很熟練,我認爲唯一的辦法就是提取每個主機唯一的表,然後按時加入。因此,(對於VAR1):

create tempTableA select time, var1 as hostA-var1 from mainTable where host=hostA

create tempTableB select time, var1 as hostB-var1 from mainTable where host=hostB

,然後做在所有使用時間變量的tempTables的加入。

+0

我不知道你是如何從表1到表2這將有助於在1所有的值放在正確的地方(只有那些所示) 2顯示相關 – RichardTheKiwi 2011-04-05 00:42:49

+0

上帝@理查德,對不起。我編輯它,以便值現在應該是準確的。 – garretriddle 2011-04-05 00:51:38

+0

好多了!我預計,所以答案如下。 – RichardTheKiwi 2011-04-05 00:55:50

回答

0

搜索谷歌的PIVOT例子

select time, 
    MAX(case when host='hostA' then var1 end) `hostA-var1`, 
    MAX(case when host='hostA' then var2 end) `hostA-var2`, 
    MAX(case when host='hostA' then var3 end) `hostA-var3`, 
    MAX(case when host='hostB' then var1 end) `hostB-var1`, 
    MAX(case when host='hostB' then var2 end) `hostB-var2`, 
    MAX(case when host='hostB' then var3 end) `hostB-var3`, 
    ..... 
from tbl 
group by time 
+0

謝謝@richard!這正是我正在尋找的 – garretriddle 2011-04-05 01:01:32

0

如果您只是想在查詢中合併兩個字段,我會推薦CONCAT函數。

說你需要匹配VAR1合併VAR2,你會用

CONCAT(`var1`,`var2`) 

所以你必須找到具有VAR1和VAR2用了一段其間行,你可以使用:

$sql = "SELECT * FROM `table` WHERE CONCAT(`var1`,'.',`var2`)='$input'"; 

如果你想輸出VAR1和VAR2用了一段其間:

$sql = "SELECT CONCAT(`var1`,'.',`var2`) AS `var1andvar2` FROM `table`"; 

希望幫助一些。

相關問題