我想创建一个系统来跟踪游戏中玩家的进度。每个玩家都可以是多个组的成员,这些组都有其他要求。为了跟踪他的进度,一旦他加入一个小组,玩家的统计数据将被保存。每当他重新加载他的统计数据时,当前的数据应保存在数据库中。
播放器的所有统计信息都以json格式存储,然后由PHP或JS解析。一旦玩家加入一个组,就会设置一个比较= 0的条目。当玩家第一次点击更新统计数据时,应该创建一个比较= 1的条目,从那时起它应该只更新,而不是新创建的。
现在我的问题是:如何实现这一目标?在阅读INSERT INTO的语法时,我得到了以下内容:
INSERT INTO `groups` (`grp`, `id`, `json`, `compare`) VALUES
($grp, $id, $json, 1) ON DUPLICATE KEY SET `json` = $json
但是,由于没有密钥集,我不知道是否可以设置两个/三个密钥(因为每个用户可以有多个组,以及同一组中的compare = 0条目) ,我认为我不能这样做。
+------+----+---------+---------+
| grp | id | json | compare |
+------+----+---------+---------+
| 1 | 1 | stats | 0 |
| 1 | 1 | stats | 1 |
| 1 | 2 | stats | 0 |
| 1 | 2 | stats | 1 |
| 2 | 2 | stats | 0 |
| 2 | 3 | stats | 0 |
| 2 | 3 | stats | 1 |
| 2 | 4 | stats | 0 |
| 2 | 5 | stats | 0 |
+------+----+---------+---------+
grp
是玩家的群组。没有真正的限制
玩家可以加入的团体数量。
id
是播放器的ID。
json
包含json中玩家的统计数据
格式(点数等)。
compare
是一个布尔值。 0代表进入统计数据(球员的得分数)
当他注册时已经有了)并且1代表当前的统计数据 - 这将是
与入门统计数据进行比较,以获得差异(=点数a
自加入该组以来的球员。)
我希望我的解释是可以理解的,有人可以帮助我。
答案 0 :(得分:2)
您可以使用insert raplace:
REPLACE INTO groups (`grp`, `id`, `json`, `compare`) VALUES (...);
但是你必须在表格中拥有主键。替换为自动查找主键,如果存在记录,则更新行,但如果不存在,则添加新行。
答案 1 :(得分:1)
您可以创建包含多个列的唯一键。这将触发'on duplicate'条款。
ALTER TABLE groups
ADD UNIQUE (grp, id, compare)