创建角色随机名字(mysql抽取随机记录)和mysql游标的使用
来源:互联网 发布:ubuntu优麒麟安装 编辑:程序博客网 时间:2024/06/05 14:27
最近在开发中遇到了一些问题,在此记录一下解决的方法,已作备忘。
1、现在创建游戏角色的时候,基本上都是支持角色名字随机的,以前此功能在客户端用代码实现,然后向服务器请求并验证,后来发现有时候连续几次都失败,所以改成在服务器实现。实现方法主要考虑使用mysql随机查询记录,在网上查了很多方案,然后用在了我们游戏中。
实现方案是,将所有随机名字都插入到一张表中,然后从中随机取一条当前角色表中没有出现过的名字。
BEGINDECLARE 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;REPEATFETCH _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语句提出去放到游标声明语句里面就好了。
2 0
- 创建角色随机名字(mysql抽取随机记录)和mysql游标的使用
- 随机抽取n个记录的SQL(mysql和sqlserver)
- mysql随机生成名字
- MYSQL的随机抽取实现方法
- 随机抽取名字
- MySQL随机抽取一条数据
- 随机选择记录(mysql)
- mysql随机查询记录
- mysql随机获取记录
- mysql 随机获取记录
- Mysql随机访问记录
- mysql随机抓取记录
- MYSQL随机抽取数据库里的几条数据
- mysql使用rand随机查询记录的高效率方法
- MySQL使用rand获取随机记录的性能优化问题
- mysql使用rand随机查询记录的高效率方法
- sql随机抽取记录
- 随机抽取数据库记录
- Linux/Unix下ODBC的安装、配置与编程
- 谈下自己做过的一个app项目:去哪吃
- UVA - 340 Master-Mind Hints
- Problem 1082 最大黑区域
- 【BZOJ】【P3714】【PA2014】【Kuglarz】【题解】【最小生成树】
- 创建角色随机名字(mysql抽取随机记录)和mysql游标的使用
- [leetcode] Best Time to Buy and Sell Stock
- 基于快速排序思想求,数组最大的k个数,数组中出现次数超过一半的数,数组中最大的k个数
- 获取一亿数据获取前100个最大值
- 珠珠钓法
- 软文推广_香港保钓船已启程赴钓鱼岛海域 拟“9.18”抵达
- Windows核心编程笔记——内核对象
- Problem 2111 Min Number
- oracle数据库误处理恢复