配置mysql数据库以保存进度

时间:2016-09-26 16:14:55

标签: php mysql database unity3d

我是论坛的新手,需要一些帮助来为我的团结游戏做一个功能。我试图将播放器的进度保存在一个mysql数据库中,如下所示:

userid level stars
29     1     2
29     2     1
45     1     3
50     1     2
50     2     3
50     3     1
29     3     3

因此脚本在游戏开始时发送用户注册提供的用户标识。并且对于他完成的每个级别,脚本发送级别的数量,以及级别中收集的星星数量。

问题和问题是,我如何在php脚本和mysql数据库中配置这个只保存一次信息?因为如果身份证50的玩家玩第一级,会添加一条信息,但如果同一玩家再次玩第一级并改变星星数量,我不想换新行,只需更新星号金额

我看一下INDEX,UNIQUE,PRIMARY,FULLTEXT,SPATIAL函数但是没弄明白什么是正确的组合以及如何放入php脚本,并在论坛中查看其他问题但没有像此

感谢您的帮助!

4 个答案:

答案 0 :(得分:0)

我建议您使用http://redis.io/(内存数据结构存储,用作数据库,缓存和消息代理)来保存游戏进度。

答案 1 :(得分:0)

首先,您需要组合上的唯一索引(userid,level),然后如果组合存在则需要更新,否则需要插入。

有关如何创建唯一索引,请查看How do I specify unique constraint for multiple columns in MySQL?

有关如何编写SQL查询以进行更新/插入,请查看SQL: If Exists Update Else Insert

上面的文章使用Microsoft SQL语法。在PHP中,您可以通过发出查询然后使用mysql_affected_rows来查看受影响的行数来对此进行编码。如果0行受影响,则从PHP发出INSERT查询。

答案 2 :(得分:0)

在伪代码中你需要在SQL中做这样的事情。

UPDATE $ table set column = value WHERE id = $ ID

答案 3 :(得分:0)

嗨brayan实际上问题是没有人会为你编写代码,你必须自己做。我猜你没有意识到SQL,即你问过

  

我如何在php脚本和mysql数据库中配置这个来保存   信息只有一次?因为如果身份证50的玩家玩了   第一级,将添加一行信息,但如果相同   玩家再次玩第一级并改变星星的数量,我   不想要换行,只需更新星号。

无论如何,您首先需要对Unity的SQL和PHP有一些基本的了解。我将向您推荐unityWiki的本指南Server_Side_Highscores,它可以帮助您使用PHP进行数据库和服务器逻辑交互。 现在是你的第二个重要部分。

每个级别完成后您必须更新用户代码。或者您只需向用户询问有关社交保存的信息。 在将新记录插入数据库之前,您必须检查是否存在具有级别ID的userId。像这样的事情

Select userid, level, stars
from youTableName
where userid = ?
and level = ?

如果上面的查询返回空响应,则只需添加记录

INSERT INTO table_name (userid, level, stars)
VALUES (value1,value2,value3);

否则您必须更新该特定列。