gpt4 book ai didi

mysql - 无法使 MySQL 功能工作

转载 作者:行者123 更新时间:2023-11-29 23:19:11 25 4
gpt4 key购买 nike

好的,我正在 MySQL 中进行这个小练习。我是一名神奇宝贝训练家,需要记录胜负、与谁战斗以及赚到的钱。一切都很顺利,直到我到达这一部分:

*创建一个计算收入的函数,如果战斗获胜则收入增加,如果战斗失败则收入减少。

我为竞争对手的训练师分配了从1到4的“等级”,每个训练师都会给予一定数量的金钱1.- 2502.- 5003.- 10004.- 2000

我的表结构或多或少像这样:

  • 战斗(idBattle、idTrainer、结果、日期、地点)
  • Trainer(idTrainer, nameTrainer, 类)
  • 主角(idProtagonist、输、赢、收入)

我需要查看战斗的结果,知道我的收入会增加还是减少,然后去我的表Trainer查看类(class),看看类(class)值多少钱,然后返回我会增加或减少多少减少我的收入。

此外,我想创建一个触发器,在输入新的胜利或损失以及更新收入时自动更新我的表格(即主教练表)。我将把代码留在下面,我已经筋疲力尽了,不知道现在该怎么办。我几乎绝望了。我可能一直从磨损的角度看待这个问题,只需要一些建议。如果您能帮助我,请先非常感谢!

    CREATE DATABASE ricardoRifa;

USE ricardoRifa;

CREATE TABLE entrenador (//trainer table
idEntrenador INT NOT NULL DEFAULT 98000,
nombreEntrenador VARCHAR(20),
clasificacion INT NOT NULL DEFAULT 1, //this is the trainer class
PRIMARY KEY (idEntrenador)
) ENGINE=INNODB;

CREATE TABLE batalla (
idBatalla INT NOT NULL AUTO_INCREMENT,
idEntrenador INT,
resultado BOOLEAN, //false=lost battle, true=won
lugar VARCHAR(20),
fecha DATE,
PRIMARY KEY (idBatalla , idEntrenador),
CONSTRAINT fk_idEntrenador FOREIGN KEY (idEntrenador)
REFERENCES entrenador (idEntrenador)
ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE=INNODB;

CREATE TABLE ricardo (//main trainer table, I wanted it to be like this for there may be more than one instance depending on the main trainer id
idRicardo INT NOT NULL DEFAULT 11490677,
perdidas INT NOT NULL DEFAULT 0,
victorias INT NOT NULL DEFAULT 0,
ganancias INT NOT NULL DEFAULT 10000,
PRIMARY KEY (idRicardo)
) ENGINE=INNODB;

delimiter |
CREATE PROCEDURE incersionEntrenador(idEntrenador INT, nombreEntrenador VARCHAR(20), clasificacion INT)
BEGIN
INSERT INTO entrenador VALUES(idEntrenador, nombreEntrenador, clasificacion);
END |

delimiter |
CREATE PROCEDURE incersionBatalla(idEntrenador INT, resultado BOOLEAN, lugar VARCHAR(20), fecha DATE)
BEGIN
INSERT INTO batalla (idEntrenador, resultado, lugar, fecha) VALUES(idEntrenador, resultado, lugar, fecha);
END |

delimiter |
CREATE FUNCTION calcularGanancia() RETURNS INT
BEGIN
DECLARE class, dinero INT;

SELECT
resultado, clasificacion
INTO class FROM
batalla
INNER JOIN
entrenador USING (idEntrenador)
WHERE
batalla.idEntrenador = entrenador.idEntrenador;


CASE class
WHEN 1 THEN SET dinero=250;
WHEN 2 THEN SET dinero=500;
WHEN 3 THEN SET dinero=1000;
WHEN 4 THEN SET dinero=2000;
ELSE SET dinero=0;
END CASE;

IF resultado = TRUE
THEN SET dinero = dinero * 1;
ELSE
SET dinero = dinero * -1;
END IF;

RETURN dinero;
END |


delimiter |
CREATE TRIGGER ricardoUpdate BEFORE
INSERT ON batalla
FOR EACH ROW BEGIN
UPDATE ricardo
SET perdidas=(SELECT COUNT(resultado) FROM batalla WHERE resultado=FALSE),
victorias=(SELECT COUNT(resultado) FROM batalla WHERE resultado=TRUE),
ganancias= ganancias + (SELECT CALCULARGANANCIA());
END |

我的函数出现此错误,错误代码 1222:使用的 SELECT 语句具有不同的列数。

最佳答案

[已编辑]

该错误通常意味着您必须显式选择连接表的列。尝试将 calularGanancia() 函数中的选择更改为如下所示(注意我使用了别名 batent):

declare class, resultado, dinero INT; /* note resultado here and into clause */
select bat.resultado, ent.clasificacion
into resultado, class
from batalla bat inner join
entrenador ent
ON bat.idEntrenador = ent.idEntrenador;

关于mysql - 无法使 MySQL 功能工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27477871/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com