【问题标题】:Mysql trigger no error message but code not workingMysql触发没有错误消息但代码不起作用
【发布时间】:2014-11-21 17:04:22
【问题描述】:

我在 phpMyAdmin 中编写了这个触发器

BEGIN
DECLARE start DATETIME;
DECLARE now DATETIME;
DECLARE date DATETIME;

SELECT `starting` INTO start FROM events WHERE events.id = NEW.event_id;
SET now = NOW();
SET date = CURDATE();

IF start > now THEN

    IF DATE(start) = date THEN
        SET @hours = HOUR(start - now);
        IF @hours <= 1 THEN
            SET @text = 'in less than an hour';
        ELSE
            SET @text = CONCAT('in about ', @hours, ' hours');
        END IF;

        INSERT INTO notifications (user_id, subject, action_id, data, seen, activates)
        VALUES (NEW.user_id, NEW.event_id, 2, CONCAT('{"period":"', @text, '"}'), 0, now);

    ELSE

        INSERT INTO notifications (user_id, subject, action_id, data, seen, activates)
        VALUES 
            (NEW.user_id, NEW.event_id, 2, '{"period":"tomorrow"}', 0, DATE(start - INTERVAL 1 DAY)),
            (NEW.user_id, NEW.event_id, 2, '{"period":"in one hour"}', 0, start - INTERVAL 1 HOUR);
    END IF;
END IF;
END

它的目的是在用户提交他将要参加活动时创建有关开始活动的通知。如果事件不是今天,触发器会起作用,但如果事件是今天,我会收到此消息

列数据不能为NULL

列数据在表notifications 中。如果事件设置为今天开始,我得到的列数据不能为 NULL,如果事件在未来发生,比如明天,我会得到准确的消息。

非常感谢任何帮助!

【问题讨论】:

  • 如果@text 为null,则@hours 必须为null - sql null 具有传染性,这可能意味着start 在您实际设置start 的第一个查询中为null,其中@987654325 @ 是基于的。
  • @MarcB 我刚刚检查过,通过将INSERT 语句中的@text 分别替换为startnow,我确定start 等于2014-11-21 20:00:00 和@987654332 @ 在测试时等于“2014-11-21 19:29:31”。出于某种原因,HOUR(start - now) 返回 NULL,我不明白..
  • 我不确定start - now 的数据类型应该是什么,但我对文档的快速阅读表明可能是一些数字类型。在任何情况下,它都不应该是DATETIMEDATETIMEHOUR() 函数似乎不太可能对此有用。
  • 不应该是= HOUR(start) - HOUR(now)吗?
  • datetime-datetime 将返回某种浮点数。 hour(float) 应该只返回1。在应用 hour() 之前将减法的结果存储在某处。

标签: mysql sql triggers


【解决方案1】:

这段代码有问题

HOUR(start - now)

我换成

HOUR(TIMEDIFF(start - now))

现在一切正常。

我必须通过Marc Bhelp 解决问题,为此我感谢他和所有评论的人!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多