从一个巨大的SQL表加入行

时间:2016-05-06 15:02:56

标签: mysql sql

像这样的很多问题已经在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"不会花费很长时间。

谢谢!

2 个答案:

答案 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`);