gpt4 book ai didi

php - MySQL - 将 3 行变成 3 列

转载 作者:行者123 更新时间:2023-11-29 22:01:24 25 4
gpt4 key购买 nike

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

我需要转换此数据:

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了,所以我已经生疏了,感谢您的帮助。

最佳答案

这应该可以解决问题,因为 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
;

关于php - MySQL - 将 3 行变成 3 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32614495/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com