MYSQL条件总是评估其他

问题描述 投票:0回答:1

来自MYSQL的以下trigger条件总是在我验证数字符合预期后对ELSE语句进行评估。如果我做出以下假设:NEW.exit_time = '2019-04-09 11:50:00'OLD.enter_time = '2019-04-09 11:00:00'我期待time_in_minutes = 50,如果SET NEW.total = 25应该plot_minimum_cost = 25。我已经验证了填充plot_minimum_cost和plot_minute_cost的select语句是准确的,因为plot_max_cost正常运行并且它使用相同的逻辑来检索。我错过了什么?

DROP TRIGGER IF EXISTS get_total_parking_cost;
DELIMITER $$
CREATE TRIGGER get_total_parking_cost BEFORE UPDATE
ON records
FOR EACH ROW
BEGIN
    DECLARE plot_minimum_cost DOUBLE;
    DECLARE plot_max_cost DOUBLE;
    DECLARE plot_minute_cost DOUBLE;
    DECLARE time_in_lot DATETIME;
    DECLARE time_in_minutes DOUBLE;

    SELECT parking_lots.min_cost INTO plot_minimum_cost
    FROM parking_lots
    WHERE parking_lots.id = OLD.parking_id;

    SELECT parking_lots.max_cost INTO plot_max_cost
    FROM parking_lots
    WHERE parking_lots.id = OLD.parking_id;

    SELECT parking_lots.minutely_cost INTO plot_minute_cost
    FROM parking_lots
    WHERE parking_lots.id = OLD.parking_id;

    SET @time_in_lot = TIMEDIFF(NEW.exit_time, OLD.enter_time);

    SET @time_in_minutes = (HOUR(time_in_lot) * 60) + MINUTE(time_in_lot);

    IF @time_in_minutes <= 60 THEN
        SET NEW.total = plot_minimum_cost;

    ELSEIF @time_in_minutes <= 300 THEN
        SET NEW.total = time_in_minutes * plot_minute_cost;

    ELSE
        SET NEW.total = plot_max_cost;
    END IF;  

END$$
DELIMITER ;
mysql triggers xampp conditional
1个回答
0
投票

你已经声明了局部变量time_in_lot并在(HOUR(time_in_lot) * 60) + MINUTE(time_in_lot)中使用它;但你从未真正设定它。您设置@time_in_lot这是一个会话变量。同样,即使你宣布了@time_in_minutes,你也要设置time_in_minutes;但在这种情况下,你使用@版本的IF条件。

基本上,从触发器中删除@字符的所有实例,看看是否修复了它。

© www.soinside.com 2019 - 2024. All rights reserved.