【问题标题】:MYSQL Conditional Always Evaluating to ElseMYSQL 条件总是评估为 Else
【发布时间】:2019-09-01 10:11:46
【问题描述】:

在我验证数字符合预期后,trigger 中的以下 MYSQL 条件总是评估 ELSE 语句。如果我做出以下假设:NEW.exit_time = '2019-04-09 11:50:00'OLD.enter_time = '2019-04-09 11:00:00' 我期望time_in_minutes = 50,如果plot_minimum_cost = 25 则应该是SET NEW.total = 25。我已经验证填充 plot_minimum_cost 和 plot_minute_cost 的选择语句是准确的,因为 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 ;

【问题讨论】:

  • @s 不一致是怎么回事?此外,各种plot_ 似乎不知从何而来;从您最初的问题描述来看,我猜他们需要 OLD/NEW。
  • @Uueerdo 拼写错误现在更正抱歉!虽然没有解决我的问题
  • @Uueerdo 添加了完整触发器。
  • @Uueerdo 刚刚找到以下并修复它,这解决了我的问题。谢谢!

标签: mysql triggers xampp conditional


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    • 2016-01-28
    • 2011-02-01
    • 1970-01-01
    • 2018-02-10
    相关资源
    最近更新 更多