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;
请注意,查询未经测试,仅作为示例给出。
我有一个具有以下结构的数据库:
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;
请注意,查询未经测试,仅作为示例给出。