Mysql 创建将“链接”ID转换为“分组”ID的查询
我请求任何人帮助我更好地命名这个问题,我不知道如何称呼它。也许有人在阅读了下面的问题后会有一个想法: 所以我在MySQL中存储了一组玩家和他们的组。在DB中,由于遗留原因,它们以类似于链的奇怪方式存储,如下所示:Mysql 创建将“链接”ID转换为“分组”ID的查询,mysql,Mysql,我请求任何人帮助我更好地命名这个问题,我不知道如何称呼它。也许有人在阅读了下面的问题后会有一个想法: 所以我在MySQL中存储了一组玩家和他们的组。在DB中,由于遗留原因,它们以类似于链的奇怪方式存储,如下所示: Player_Id New_Group 100 1 101 0 102 0 103 0 104 1 105 0 106 0 107
Player_Id New_Group
100 1
101 0
102 0
103 0
104 1
105 0
106 0
107 0
108 0
所以这里基本上Playerid100将新的_组设置为1。所以他是一个新团队的开始。现在所有在他之后的球员,因为他们有新的_组为0,属于他的组。当我们到达104时,一个新的小组开始了
我想做的是编写一个查询,它将给出如下结果:
Player_Id Group_Id
100 1
101 1
102 1
103 1
104 2
105 2
106 2
107 2
108 2
你明白了……我正试图将新的_组逻辑转换成只为玩家生成伪组ID的东西
但是,这超出了我的SQL技能。如果有任何SQL专家可以帮助我,那就太棒了。我使用MySQL。这是怎么回事
SELECT player_id
, CASE WHEN new_group = 1 THEN @i:=@i+1 ELSE @i:=@i END i
FROM my_table
, (SELECT @i:=0) vars
ORDER
BY player_id;
SET @group = 0;
SELECT Player_Id, IF(New_Group, @group:=@group + 1, @group) AS Group_Id
FROM [table]
ORDER BY Player_Id;
假设表中有某列正在升序,则可以执行以下操作:
select Player_Id, count(select * from [table] t2 where new_group=1 and t2.ascending_row <= t1.ascending_row) from [table] t1
在上面的示例中,Player_Id可用于提升_行,因为值都在递增。如果没有,您可能需要创建一个包含行id的列的临时表,然后使用它。考虑一下。我不确定原件是否已订购,但我要补充。如果它没有“订购”,那么问题基本上是无法解决的。它不会在每一行出现时进行处理,并且可能新的组输入正确,但玩家Id未订购吗?显然这不是一个好方法。关系数据库中的表表示无序集。”“发生时”在上下文中没有意义,明白了。谢谢。玩家id总是沿着桌子上升吗?