MYSQL 条件总是评估为 Else

标签 mysql triggers xampp conditional-statements

在我验证数字符合预期之后,来自触发器的以下MYSQL条件始终评估ELSE语句。如果我做出以下假设: NEW.exit_time = '2019-04-09 11:50:00', OLD.enter_time = '2019-04-09 11:00:00' 我期望 time_in_months = 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 ;

最佳答案

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

基本上,从触发器中删除 @ 字符的所有实例,看看是否可以解决问题。

关于MYSQL 条件总是评估为 Else,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55621235/

相关文章:

java - 将 vector 行插入 JTable 中?

MySQL 查询 IN 内的 SELECT

mysql - SQL Sum 每个团队的前 5 行

mysql - ClearDB 自增

SQL 服务器 2012 : DATETIME discrepancies between inserts and triggers

用于自动递增 varchar(不是主键)的 MySQL 触发器

sql-server - 带有外键的 SQL Server 触发器表

java - 在 Java 应用程序中集成 MySQL + Webserver + PHP

linux - andLinux + LAMPP 比XAMPP 好?

wordpress - XAMPP 和 Wordpress - 加载缓慢