Autoincrement MySQL table 以其他列值为条件

Autoincrement MySQL table conditional on other column values

我有一个具有以下结构的数据库:

ID  LEVEL  MOVE NUMBER  VALUE
1     1         1        123
1     1         2        345

我正在用 javascript 记录变量“值”,并通过 PHP 将其发送到数据库。我需要做的是构建一个 SQL 查询,通过 自动递增列“move number” 来更新 table。但是,这应该 以列值“ID”和“级别” 为条件。这意味着如果 ID=2 的玩家玩第 1 级,数据库应该更新为:

ID  LEVEL  MOVE NUMBER  VALUE
1     1         1        123
1     1         2        456
2     1         1        789

可变级别也是如此。最后,假设我们总共有 3 个玩家,两个级别和 2 个动作,数据库应该如下所示:

ID  LEVEL  MOVE NUMBER  VALUE
1     1         1        123
1     1         2        456
2     1         1        789
3     1         1        012
1     2         1        345
2     1         2        678
...

在这种情况下,按 id 或级别分组并不重要。重要的是每一步都连同它的价值被顺序记录下来。由于我不太熟悉 SQL 语法,所以我不确定如何实现此

我想我明白你想要什么。每次为特定玩家“ID”和“级别”插入新动作时,“MOVE NUMBER”应该增加一个。称其为“自动递增”有点误导,因为 MySQL 已经有一个 AUTO_INCREMENT,这是不同的东西。

让我们首先获取“ID”= 1 和“Level”= 1 的最后一个“MOVE NUMBER”:

SELECT MAX(`MOVE NUMBER`) FROM GameScore WHERE ID = 1 AND Level = 1;

对于你问题的最后结果,这应该是 return 2。但是,这可能 return NULL,所以我们这样做:

SELECT IFNULL(MAX(`MOVE NUMBER`), 0) FROM GameScore WHERE ID = 1 AND Level = 1;

然后它将 return 0.

现在我们需要做的就是插入一个新的“VALUE”,例如 463。它是这样的:

INSERT INTO GameScore (ID, 
                       LEVEL, 
                       `MOVE NUMBER`, 
                       VALUE)
SELECT 1,
       1,
       IFNULL(MAX(`MOVE NUMBER`), 0) + 1, 
       463 
FROM GameScore 
WHERE ID = 1 AND 
      Level = 1; 

请注意,查询未经测试,仅作为示例给出。