我尝试创建一个函数,它应该返回具有最高伤害值的法术的id。我有两种类型的伤害处理法术,每步造成伤害的伤害和一步造成伤害的伤害。这是我的代码:
DELIMITER //
CREATE FUNCTION `getSpellMaxDmgID`(`pCharID` int(11))
RETURNS int(11)
DETERMINISTIC
BEGIN
DECLARE pdmgpts int(11) DEFAULT 0;
DECLARE pdmgprstp int(11) DEFAULT 0;
DECLARE pdmgmaxspellid int(11) DEFAULT 0;
IF (SELECT MAX(`damage_points`) FROM `spell` WHERE `spell`.`spell_id` IN( SELECT `spell_id` FROM `character_spell` WHERE `character_spell`.`character_id`=pCharID)) IS NOT NULL THEN
SET pdmgpts=(SELECT MAX(`damage_points`) FROM `spell` WHERE `spell`.`spell_id` IN( SELECT `spell_id` FROM `character_spell` WHERE `character_spell`.`character_id`=pCharID));
END IF;
IF (SELECT MAX(`damage_per_step`) FROM `spell` WHERE `spell`.`spell_id` IN( SELECT `spell_id` FROM `character_spell` WHERE `character_spell`.`character_id`=pCharID)) IS NOT NULL THEN
SET pdmgprstp=(SELECT MAX(`damage_per_step`) FROM `spell` WHERE `spell`.`spell_id` IN( SELECT `spell_id` FROM `character_spell` WHERE `character_spell`.`character_id`=pCharID));
END IF;
IF pdmgpts>=pdmgprstp THEN
SET pdmgmaxspellid=(SELECT `spell_id` FROM `spell` WHERE `spell`.`damage_points`=pdmgpts AND `spell`.`spell_id` IN ( SELECT `spell_id` FROM `character_spell` WHERE `character_spell`.`character_id`=pCharID) LIMIT 1);
ELSE
SET pdmgmaxspellid=(SELECT `spell_id` FROM `spell` WHERE `spell`.`damage_per_step`=pdmgpts AND `spell`.`spell_id` IN ( SELECT `spell_id` FROM `character_spell` WHERE `character_spell`.`character_id`=pCharID) LIMIT 1);
END IF;
RETURN pdmgmaxspellid;
END; //
DELIMITER ;
当我尝试像这个SELECT getSpellMaxDmgID(8)
一样调用函数时,该函数返回NULL值,即使它应该返回一个整数值,使得具有该角色ID的角色在其法术列表中具有法术。谁能在这里看到这个问题?提前谢谢!
这是表结构:
CREATE TABLE `spell` (
`spell_id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`spell_type_id` int(11) UNSIGNED NOT NULL,
`name` varchar(30) NOT NULL,
`magicka_cost` int(11) NOT NULL,
`damage_per_step` int(11) DEFAULT NULL,
`damage_points` int(11) DEFAULT NULL,
`fortify_points` int(11) DEFAULT NULL,
PRIMARY KEY (`spell_id`),
CONSTRAINT `fk_spell_spell_type_id` FOREIGN KEY (`spell_type_id`) REFERENCES `spell_type`(`spell_type_id`) ON DELETE CASCADE ON UPDATE CASCADE);
还有一些数据:
INSERT INTO spell (spell_type_id, name, magicka_cost, damage_per_step) VALUES (2, 'Summon Dremora', 84, 30);
INSERT INTO spell (spell_type_id, name, magicka_cost, damage_per_step) VALUES (2, 'Summon Flame Atronach', 69, 25);
INSERT INTO spell (spell_type_id, name, magicka_cost, damage_points) VALUES (3, 'Fire Damage', 10, 30);
INSERT INTO spell (spell_type_id, name, magicka_cost, damage_points) VALUES (3, 'Frost Damage', 10, 30);
INSERT INTO spell (spell_type_id, name, magicka_cost, fortify_points) VALUES (2, 'Bound Boots', 6, 10);
INSERT INTO spell (spell_type_id, name, magicka_cost, fortify_points) VALUES (2, 'Bound Cuirass', 6, 10);
拼写类型:
CREATE TABLE `spell_type` (
`spell_type_id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
PRIMARY KEY (`spell_type_id`));
INSERT INTO
spell_type (
名称) VALUES ('Alteration');
INSERT INTO
spell_type (
名称) VALUES ('Conjuration');
INSERT INTO
spell_type (
名称) VALUES ('Destruction');
INSERT INTO
spell_type (
名称) VALUES ('Illusion');
INSERT INTO
{spell_type {1}} {名称{1}} {spell_type {1}} {名称{1}}
角色拼写:
(
character_spell ) VALUES ('Mysticism');
INSERT INTO
character_spell_id (
character_id ) VALUES ('Restoration');
spell_id CREATE TABLE
character_spell_id (
uk_character_id_spell_id int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
character_id int(11) UNSIGNED NOT NULL,
spell_id int(11) UNSIGNED NOT NULL,
PRIMARY KEY (
fk_character_spell_character_id ),
CONSTRAINT
character_id UNIQUE (
字符,
character_id ),
CONSTRAINT
fk_character_spell_spell_id FOREIGN KEY (
spell_id ) REFERENCES
咒语(
spell_id { {1}}
) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT
character_spell FOREIGN KEY (
character_id ) REFERENCES
spell_id (
character_id ) ON DELETE CASCADE ON UPDATE CASCADE
);
character_spell INSERT INTO
character_id (
spell_id ,
character_id ) VALUES(
character_spell , 10);
INSERT INTO
character_id (
spell_id ,
character_id ) VALUES(
character_spell , 14);
INSERT INTO
character_id (
spell_id ,
character_id { {1}} character_spell ) VALUES(
character_id , 18);
INSERT INTO
spell_id (
character_id ,
character_spell ) VALUES(
character_id , 28);
INSERT INTO
spell_id (
character_id {{1 }}
字符:
,
字符) VALUES(
character_id , 55);
INSERT INTO
的user_id (
名称,
性别) VALUES(
XP , 87);
级CREATE TABLE
钱(
{character_id {1}} {uk_character_id_user_id {1}} {character_id {1}} {USER_ID {1}}
int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
字符int(11) UNSIGNED NOT NULL,
的user_id varchar(30) NOT NULL,
名称varchar(10) NOT NULL,
性别bigint NOT NULL,
XP bigint NOT NULL,
级bigint NOT NULL,
PRIMARY KEY (
钱),
CONSTRAINT
7 UNIQUE (
{Mashiela {1}} {女{1}}