繁体   English   中英

从一个巨大的SQL表联接行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM