mysql - 创建一个将 "chained"id 转换为 "grouped"id 的查询

标签 mysql

我请求任何人帮助我更好地命名这个问题,我不确定如何调用它。也许有人读完下面的问题就会有一个想法:

所以我在 MySQL 中存储了一组玩家及其组。在DB中,由于遗留原因,它们以一种奇怪的方式存储(像链一样),如下所示:

Player_Id     New_Group
100           1
101           0
102           0
103           0
104           1
105           0
106           0
107           0
108           0

所以这里基本上 PlayerId 100 将 New_Group 设置为 1。所以他处于新组的开始位置。现在所有在他之后的玩家,因为New_Group为0,都属于他的组。当我们到达 104 时,一个新的组开始。

我想要做的是编写一个查询,它将给出如下结果:

Player_Id     Group_Id
100           1
101           1
102           1
103           1
104           2
105           2
106           2
107           2
108           2

你明白了...我正在尝试将 New_Group 逻辑转换为只为玩家生成伪组 ID 的东西。

但是,这超出了我的 SQL 技能范围。如果任何 SQL 大师可以帮助我,那就太棒了。我使用 MySQL。

最佳答案

这个怎么样?

SET @group = 0;
SELECT Player_Id, IF(New_Group, @group:=@group + 1, @group) AS Group_Id
FROM [table]
ORDER BY Player_Id;

关于mysql - 创建一个将 "chained"id 转换为 "grouped"id 的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43808499/

相关文章:

PHP 只打印一行

mysql - 在 MySQL 中从 mongoDB 模拟 geoNear 或 near

mysql - 如何计算过去同一时间间隔的记录数?

python - 使用 Python 脚本将 MySQL 表转储到 CSV 文件并将其保存在给定位置

mysql - cakephp3 自己的查询生成器

python - 自定义 unique_together 键名

java - 获取第一个解锁行

php - MySQL select 在 WHERE 子句中进行日期时间比较会导致 PHP 错误

php - 使用外键合并两个数据库时的 SQL 问题

PHP/MySQL - 编辑审批系统