我有一个奇怪地存储数据的表 - 我无法更改表或数据库本身的结构,我必须处理这些数据:
我需要转换这些数据:
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以来已经有好几年了,所以我非常生疏,感谢您的帮助。
答案 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
;