[英]Join Rows from one huge SQL Table
像这样的许多问题已经在stackoverflow上,但是据我对SQL的了解,我无法将其组合在一起。
我的桌子看起来像这样。 我有1000个Player_Id和200个Stat_Id
PlayerID | StatsID | StatValue
==================================
1 | 1 | 99
1 | 2 | 31
1 | 3 | 1
2 | 1 | 102
2 | 2 | 1
2 | 3 | 33
3 | 1 | 0
3 | 2 | 1
3 | 3 | 3,4
我想获得一个用户数组,其中一个User对象如下所示:
{playerId:1, stats:{"1":99, "2":31, "3":1, ...}}
我已经尝试了很多,但是没有什么比我想要完成的更接近的。 使用此SQL,我得到了最好的结果:
SELECT `PlayerID`,
GROUP_CONCAT(`StatsID` SEPARATOR ', ')
FROM `player_stats`
WHERE 1 group by `PlayerID`
结果如下:
Array
(
[0] => Array
(
[PlayerID] => 15895
[stats] => 1, 2, 3
)
[1] => Array
(
[PlayerID] => 21307
[stats] => 1, 2, 3
)
如何将StatValue列带入查询? 在SQL查询之后或使用多个查询来生成所需的对象会更好吗?
性能不是很关键,但是如果生成“ playerId-array”不会花费很多时间,那当然很好。
谢谢!
您实际上可以只将列添加到GROUP_CONCAT()
:
SELECT `PlayerID`, GROUP_CONCAT(`StatsID`, ':', StatValue SEPARATOR ', ') as stats
FROM `player_stats`
GROUP BY `PlayerID`;
尝试
SELECT `PlayerID`, `StatsValues` FROM (
SELECT `PlayerID`, CONCAT(`StatsID`, ',', GROUP_CONCAT(`StatsValues` SEPARATOR ', ')) AS `StatsValues`
FROM tblName
GROUP BY `PlayerID`, `StatsID`);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.