将1列mysql表与其他列组合在一起(cols a,b,c,d变为a-b,a-c,a-d)

时间:2011-04-05 00:38:23

标签: mysql

我有一个mysql表:

-----------------------------------------------------------
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

然后使用时间变量对所有tempTable进行连接。

2 个答案:

答案 0 :(得分:0)

如果您只想在查询中合并两个字段,我建议使用CONCAT函数。

假设你需要匹配与var2合并的var1,你可以使用

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`";

希望有所帮助。

答案 1 :(得分:0)