Итак, я делаю это небольшое упражнение в MySQL. Я тренер покемонов, у которого должен быть рекорд выигрышей и проигрышей, с которыми я сражался, и заработанные деньги. Все идет все денди, пока я не доберусь до этой части:Невозможно заставить MySQL работать
* Создайте функцию, которая рассчитывает прибыль, если битва была выиграна, тогда заработок увеличится, если битва будет убыточной, а прибыль уменьшится.
поручает соперничающие тренер с "классом" от 1 до 4, каждый тренер дает определенную сумму денег 1.- 250 2.- 500 3.- 1000 4.- 2000
Мои таблицы структуры идут более или менее, как это:
- битвы (idBattle, idTrainer, результат, дата, место)
- Trainer (idTrainer, nameTrainer, класс)
- р rotagonist (idProtagonist, проигрывает, воны, доходы)
мне нужно проверить на исход битвы, чтобы знать, если мой доход будет увеличиваться или уменьшаться, а затем перейти на мой стол тренер и проверить класс, чтобы увидеть, сколько это ценность класса, а затем верните, сколько я буду увеличивать или уменьшать свои доходы.
Также я хочу создать триггер, который автоматически обновляет мою таблицу (т. Е. Таблицу главных тренеров), когда будет введена новая победа или потеря, а также обновление заработка. Я оставлю код ниже, я все высох и понятия не имею, что делать сейчас. Я в отчаянии. Возможно, я смотрел на эту проблему из-за угла, просто нужно посоветовать. МНОГО, МНОГО СПАСИБО В РАМКАХ, ЕСЛИ ВЫ МОЖЕТЕ ПОМОЧЬ МНЕ!
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 имеют различное количество столбцов.
я получаю ту же ошибку, но спасибо. И почему вы верите, где не нужно? Это избыточно? – Karnkuret
ДА! с вашим новым изданием он работал !!!! Я не отвлекался на результат, так что немой я устал. БЛАГОДАРЯ! – Karnkuret