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; END
因為對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;
A:SELECT INTO 語句或 INSERT 語句的子查詢的結果為空表。
B:在搜索的 UPDATE 或 DELETE 語句內標識的行數為零。
C:在 FETCH 語句中引用的游標位置處于結果表最后一行之后。
后來把select語句提出去放到游標聲明語句里面就好了。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com