MySQL - 将3行转换为3列

时间:2015-09-16 16:57:03

标签: php mysql

我有一个奇怪地存储数据的表 - 我无法更改表或数据库本身的结构,我必须处理这些数据:

我需要转换这些数据:

NID        SID        CID        DATA
1000       10         1          This
1000       10         2          is
1000       10         3          data
1000       11         1          This
1000       11         2          is
1000       11         3          lore
1000       12         1          This
1000       12         2          is
1000       12         3          picard

进入这个:

This      is      data
This      is      lore
This      is      picard

但我似乎无法弄清楚如何将这些东西加在一起,它不会点击我的大脑。

我可以将多个SELECT语句组合在一起吗?像

这样的东西
SELECT data FROM submitted WHERE nid='1000' AND cid='1' AS col1
SELECT data FROM submitted WHERE nid='1000' AND cid='2' AS col2
SELECT data FROM submitted WHERE nid='1000' AND cid='3' AS col3

然后我的PHP代码就像

一样简单
print ("<tr>
<td>$row[col1]</td>
<td>$row[col2]</td>
<td>$row[col3]</td>
</tr>");

我不认为MySQL在“WHERE”之后接受“AS”。自从我接触MySQL以来已经有好几年了,所以我非常生疏,感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

这应该可以解决问题,因为GROUP_CONCAT会忽略空值,除非它们是唯一处理的值:

SELECT SID
, GROUP_CONCAT(IF(CID=1, DATA, NULL)) AS d1
, GROUP_CONCAT(IF(CID=2, DATA, NULL)) AS d2
, GROUP_CONCAT(IF(CID=3, DATA, NULL)) AS d3
FROM submitted
WHERE NID = 1000
GROUP BY SID
;

注意:在结果中包含SID是完全可选的,并且仅基于我自己的个人强迫。 ;)

如果您在单独的结果字段中实际上不需要它们,这将更简单:

SELECT SID, GROUP_CONCAT(DATA ORDER BY CID SEPARATOR ' ')
FROM submitted
WHERE NID = 1000
GROUP BY SID
;