像这样的很多问题已经在stackoverflow上,但是我对SQL的了解很少,我不能把它放在一起。
我的表看起来像这样。我有1000个Player_Id和200个Stat_Id&#39>
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
我想获得一个用户对象的数组:
{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 Query或多个查询之后生成所需对象会更好吗?
性能不是很重要但当然如果生成" playerId-array"不会花费很长时间。
谢谢!
答案 0 :(得分:1)
您实际上只需将列添加到GROUP_CONCAT()
:
SELECT `PlayerID`, GROUP_CONCAT(`StatsID`, ':', StatValue SEPARATOR ', ') as stats
FROM `player_stats`
GROUP BY `PlayerID`;
答案 1 :(得分:0)
尝试
SELECT `PlayerID`, `StatsValues` FROM (
SELECT `PlayerID`, CONCAT(`StatsID`, ',', GROUP_CONCAT(`StatsValues` SEPARATOR ', ')) AS `StatsValues`
FROM tblName
GROUP BY `PlayerID`, `StatsID`);