MySQL存储过程实战:给指定的玩家发放Avatar Item
2011-07-13 11:10
573 查看
之前的博客文章
这里的思路是:输入为@PlayerName,也就是UserName; 输出是@ResultString,来记录最终执行的结果的字符串;定义了三个变量,都是int型的: Gender用来存放查询到的玩家的性别; AID用来存放AccountID; RCount用来存放FOUND_ROWS()的值。
首先是通过玩家的UserName来查询他/她的AccountID; 如果没有符合条件的玩家,就在@ResultString中记录相应的错误信息; 如果有查到对应的玩家的AccountID,就根据AccountID来取得其性别,存放在@Gender中;有了性别的信息,就可以根据男女,分别调用IssueMaleAvatarItem和IssueFemaleAvatarItem的存储过程来发放对应的Avatar Item。调用子SP完成以后,查询PlayerItem表来确认对应的玩家已经得到了Avatar Item。如果结果的记录数大于5,就是发放成功了,否则则是出了问题。对@ResultString变量会做相应的更新。
对应的两个子存储过程的定义如下:
剩下的就是准备相应的调用脚本了,可以有Excel里用CONCATENATE函数来做:在一张新datasheet中第一列放所有的玩家的UserName;第二列的公式用:=CONCATENATE("call guocui3.IssueAvatarItems('", $A1, "'@ResultString);") . 最后生成的脚本应该是这样的:
连接到相应的数据库,执行上面的SQL脚本就可以了。
MySQL上存储过程和触发器的一个实例 -- 为注册新玩家赠送avatar item
里写过对于所有的注册玩家都发放avatar Item的例子。但是免费的午餐不会一直都有,注册就免费送的活动结束以后,还是要手式挑选出符合条件的玩家,进行avatar item的发放工作。这里接着MySQL上存储过程和触发器的一个实例 -- 为注册新玩家赠送avatar item
的思路,做了一个针对指定玩家(按用户名)发放avatar Item的存储过程:相关的数据表结构请参阅MySQL上存储过程和触发器的一个实例 -- 为注册新玩家赠送avatar item
首先来看主的给avatar item的存储过程:DROP PROCEDURE IF EXISTS IssueAvatarItems; CREATE PROCEDURE IssueAvatarItems (IN PlayerName VARCHAR(20), OUT ResultString VARCHAR(100)) BEGIN DECLARE Gender int; DECLARE AID int; DECLARE RCount int; SELECT 'Start processing player info...' into ResultString; SELECT Account.AccountID into AID from Account where UserName = PlayerName; /*Get the accountID from the player's username*/ SELECT FOUND_ROWS() into RCount; IF (RCount=0) THEN # if there is no such player with the username SELECT CONCAT('The player \'',PlayerName,'\' is not found in GameDB!') INTO ResultString; ELSE SELECT DISTINCT CharacterAttr.Gender INTO Gender FROM CharacterAttr, GameCharacter WHERE CharacterAttr.CharacterID = GameCharacter.CharacterID AND GameCharacter.AccountID= AID; IF (Gender =0) THEN # it is a Male CALL IssueMaleAvatarItem(AID); ELSEIF (Gender =1) THEN # if it is a Female CALL IssueFemaleAvatarItem(AID); END IF; SELECT ItemID from PlayerItem WHERE AccountID= AID;/*Checking inserting results*/ SELECT FOUND_ROWS() into RCount; IF (RCount>5) THEN SELECT CONCAT('Player: \'',PlayerName, '\' has been successfully given ',RCount,' Avatar Items!') INTO ResultString; ELSE SELECT CONCAT('Player: \'',PlayerName, '\' has errors in issuing avatar items!') INTO ResultString; END IF; SELECT ResultString; END IF; END;
这里的思路是:输入为@PlayerName,也就是UserName; 输出是@ResultString,来记录最终执行的结果的字符串;定义了三个变量,都是int型的: Gender用来存放查询到的玩家的性别; AID用来存放AccountID; RCount用来存放FOUND_ROWS()的值。
首先是通过玩家的UserName来查询他/她的AccountID; 如果没有符合条件的玩家,就在@ResultString中记录相应的错误信息; 如果有查到对应的玩家的AccountID,就根据AccountID来取得其性别,存放在@Gender中;有了性别的信息,就可以根据男女,分别调用IssueMaleAvatarItem和IssueFemaleAvatarItem的存储过程来发放对应的Avatar Item。调用子SP完成以后,查询PlayerItem表来确认对应的玩家已经得到了Avatar Item。如果结果的记录数大于5,就是发放成功了,否则则是出了问题。对@ResultString变量会做相应的更新。
对应的两个子存储过程的定义如下:
DROP PROCEDURE IF EXISTS IssueMaleAvatarItem; CREATE PROCEDURE IssueMaleAvatarItem (in AID int) /*INSERT into the playeritem table the full set of available avatar items for male player*/ BEGIN DECLARE ItemCount int; /*Check if the player already has some avatar items in the PlayerItem table*/ SELECT count(0) into ItemCount from PlayerItem WHERE AccountID = AID; IF (ItemCount < 1) THEN /*Insert male avatar items if there are no items stored for this player in PlayerItem table */ # INSERT the full set of avatar item for this player: INSERT INTO PlayerItem (AccountID,ItemID,Quantity,Status,ExpirationTime,InUse) VALUES(AID, '0','1','1','2022-12-31 12:12:12','1'), #default face (AID, '15','1','1','2022-12-31 12:12:12','1'), #hair set (AID, '17','1','1','2022-12-31 12:12:12','0'), (AID, '19','1','1','2022-12-31 12:12:12','0'), (AID, '69','1','1','2022-12-31 12:12:12','0'), (AID, '71','1','1','2022-12-31 12:12:12','0'), (AID, '73','1','1','2022-12-31 12:12:12','0'), (AID, '75','1','1','2022-12-31 12:12:12','0'), (AID, '77','1','1','2022-12-31 12:12:12','0'), (AID, '79','1','1','2022-12-31 12:12:12','0'), (AID, '81','1','1','2022-12-31 12:12:12','0'), (AID, '31','1','1','2022-12-31 12:12:12','1'), #clothes set (AID, '28','1','1','2022-12-31 12:12:12','0'), (AID, '29','1','1','2022-12-31 12:12:12','0'), (AID, '30','1','1','2022-12-31 12:12:12','0'), (AID, '53','1','1','2022-12-31 12:12:12','0'), #hat set (AID, '54','1','1','2022-12-31 12:12:12','0'), (AID, '55','1','1','2022-12-31 12:12:12','0'), (AID, '89','1','1','2022-12-31 12:12:12','0'), (AID, '90','1','1','2022-12-31 12:12:12','0'), (AID, '91','1','1','2022-12-31 12:12:12','0'), (AID, '92','1','1','2022-12-31 12:12:12','0'), (AID, '93','1','1','2022-12-31 12:12:12','0'), (AID, '94','1','1','2022-12-31 12:12:12','0'), (AID, '95','1','1','2022-12-31 12:12:12','0'), (AID, '46','1','1','2022-12-31 12:12:12','0'), #glass set (AID, '47','1','1','2022-12-31 12:12:12','0'), (AID, '48','1','1','2022-12-31 12:12:12','0'); End IF; END;
DROP PROCEDURE IF EXISTS IssueFemaleAvatarItem; CREATE PROCEDURE IssueFemaleAvatarItem (in AID int) /*INSERT into the playeritem table the full set of available avatar items for female player*/ BEGIN DECLARE ItemCount int; /*Check if the player already has some avatar items in the PlayerItem table*/ SELECT count(0) into ItemCount from PlayerItem WHERE AccountID = AID; IF (ItemCount < 1) THEN /*Insert female avatar items if there are no items stored for this player in PlayerItem table */ # INSERT the full set of avatar item for this player: INSERT INTO PlayerItem (AccountID,ItemID,Quantity,Status,ExpirationTime,InUse) VALUES(AID, '3','1','1','2022-12-31 12:12:12','1'), #default face (AID, '7','1','1','2022-12-31 12:12:12','1'), #hair set (AID, '9','1','1','2022-12-31 12:12:12','0'), (AID, '11','1','1','2022-12-31 12:12:12','0'), (AID, '13','1','1','2022-12-31 12:12:12','0'), (AID, '56','1','1','2022-12-31 12:12:12','0'), (AID, '58','1','1','2022-12-31 12:12:12','0'), (AID, '61','1','1','2022-12-31 12:12:12','0'), (AID, '63','1','1','2022-12-31 12:12:12','0'), (AID, '65','1','1','2022-12-31 12:12:12','0'), (AID, '67','1','1','2022-12-31 12:12:12','0'), (AID, '21','1','1','2022-12-31 12:12:12','1'), #clothes set (AID, '22','1','1','2022-12-31 12:12:12','0'), (AID, '23','1','1','2022-12-31 12:12:12','0'), (AID, '24','1','1','2022-12-31 12:12:12','0'), (AID, '49','1','1','2022-12-31 12:12:12','0'), #hat set (AID, '50','1','1','2022-12-31 12:12:12','0'), (AID, '51','1','1','2022-12-31 12:12:12','0'), (AID, '52','1','1','2022-12-31 12:12:12','0'), (AID, '83','1','1','2022-12-31 12:12:12','0'), (AID, '84','1','1','2022-12-31 12:12:12','0'), (AID, '85','1','1','2022-12-31 12:12:12','0'), (AID, '86','1','1','2022-12-31 12:12:12','0'), (AID, '87','1','1','2022-12-31 12:12:12','0'), (AID, '88','1','1','2022-12-31 12:12:12','0'), (AID, '42','1','1','2022-12-31 12:12:12','0'), #glass set (AID, '43','1','1','2022-12-31 12:12:12','0'), (AID, '44','1','1','2022-12-31 12:12:12','0'), (AID, '45','1','1','2022-12-31 12:12:12','0'); End IF; END;
剩下的就是准备相应的调用脚本了,可以有Excel里用CONCATENATE函数来做:在一张新datasheet中第一列放所有的玩家的UserName;第二列的公式用:=CONCATENATE("call guocui3.IssueAvatarItems('", $A1, "'@ResultString);") . 最后生成的脚本应该是这样的:
call guocui3.IssueAvatarItems('mnbvcxz123', @ResultString); call guocui3.IssueAvatarItems('qinqin168', @ResultString); call guocui3.IssueAvatarItems('Torowang365', @ResultString); call guocui3.IssueAvatarItems('ldj123', @ResultString); call guocui3.IssueAvatarItems('dubtttt', @ResultString); call guocui3.IssueAvatarItems('yangxin123', @ResultString); call guocui3.IssueAvatarItems('yr0219', @ResultString); call guocui3.IssueAvatarItems('fxy9988', @ResultString); call guocui3.IssueAvatarItems('cuixu008', @ResultString); call guocui3.IssueAvatarItems('q1425651039', @ResultString); call guocui3.IssueAvatarItems('pengpeng', @ResultString); call guocui3.IssueAvatarItems('majiangzhi', @ResultString); call guocui3.IssueAvatarItems('woyaosha', @ResultString); call guocui3.IssueAvatarItems('leon3327', @ResultString); call guocui3.IssueAvatarItems('hongren', @ResultString); call guocui3.IssueAvatarItems('tinashi', @ResultString);
连接到相应的数据库,执行上面的SQL脚本就可以了。
相关文章推荐
- MySQL存储过程之游标实战
- MySql 存储过程实战(附完整注释)
- mysql存储过程,获取指定数据库的某个表的字段信息
- mysql存储过程实战基础入门
- MySQL上存储过程和触发器的一个实例 -- 为注册新玩家赠送avatar item
- 如何在MySQL存储过程中保留注释
- mysql 存储过程变量的定义
- 自动为指定表的指定字段生成编号的存储过程
- MySQL存储过程分页兼返回总页数
- MySQL存储过程详解
- mysql存储过程
- 利用MySQL存储过程分割字符串
- 7 MySQL存储过程和函数
- 利用存储过程得到某一指定的表与其它的表之间的外键关系2000
- mysql存储过程详解
- mysql 存储过程的创建
- 用mysql写存储过程中遇到的问题
- MySQL的存储过程1
- MySQL存储过程简介
- mysql存储过程详解