创建角色随机名字(mysql抽取随机记录)和mysql游标的使用_MySQL
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了创建角色随机名字(mysql抽取随机记录)和mysql游标的使用_MySQL,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1641字,纯文字阅读大概需要3分钟。
内容图文
最近在开发中遇到了一些问题,在此记录一下解决的方法,已作备忘。1、现在创建游戏角色的时候,基本上都是支持角色名字随机的,以前此功能在客户端用代码实现,然后向服务器请求并验证,后来发现有时候连续几次都失败,所以改成在服务器实现。实现方法主要考虑使用mysql随机查询记录,在网上查了很多方案,然后用在了我们游戏中。
实现方案是,将所有随机名字都插入到一张表中,然后从中随机取一条当前角色表中没有出现过的名字。
BEGIN DECLARE randnum int DEFAULT 0; SELECT FLOOR(RAND() * 309034) INTO randnum; SELECT rname INTO _name FROM `names` WHERE ((_sex = sex) AND (rname not in (SELECT Name FROM longwen.player WHERE _world = WorldID)) AND (id > randnum)) LIMIT 1; set returnvalue = 0; END2、接运营的需求,有时候因为服务器维护,需要给所有玩家送一些东西,这时候涉及离线玩家,所以我们的方案是静态写数据库。
因为对mysql没有深入研究过,在实践的过程中发现游标操作只能修改一条数据,后来查了很多资料,还是解决了问题,自己也学到了一点知识,修改后存储过程如下:
DECLARE _cursor CURSOR FOR SELECT RoleID FROM player WHERE (RoleID NOT IN (SELECT roleID FROM email where LENGTH(datas) <> 0)); DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' set _done = 1; OPEN _cursor; set _done = 0; REPEAT FETCH _cursor into _roleId; replace into email(roleID, datas) values(_roleId, 'test'); UNTIL _done END REPEAT; CLOSE _cursor;修改前repeat里面有一条select语句。出现这个问题,主要是对SQLSTATE理解不够,02000异常有3种条件:
A:SELECT INTO 语句或 INSERT 语句的子查询的结果为空表。
B:在搜索的 UPDATE 或 DELETE 语句内标识的行数为零。
C:在 FETCH 语句中引用的游标位置处于结果表最后一行之后。
后来把select语句提出去放到游标声明语句里面就好了。
内容总结
以上是互联网集市为您收集整理的创建角色随机名字(mysql抽取随机记录)和mysql游标的使用_MySQL全部内容,希望文章能够帮你解决创建角色随机名字(mysql抽取随机记录)和mysql游标的使用_MySQL所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。