使用TIMESTAMPDIFF()在表A,INSERT或UPDATE表B上执行MySQL触发器

时间:2018-10-30 14:59:52

标签: mysql triggers heidisql

我有2个表-客户端和client_history。

CLIENTS:
    cID | last_seen  (LAST_SEEN is updated every 2 mins by my application)

CLIENT_HISTORY :
    ID | cID | left_left | time_arrived

我正在尝试:

记录一段时间内客户的来往情况。因此,当client.last_seen的时间超过5分钟时,INSERT会使用cID和client.last_seen值将其记录到client_history中。

我想要类似的东西

 BEGIN
  IF (-- something here is true)
  THEN
    INSERT INTO client_history
    SET
      cID=old.cID,
      last_seen=old.last_seen;
  ELSEIF (-- something here is true)
  THEN
    INSERT INTO client_history
    SET
      time_arrived=old.last_seen
  END IF;
END

我一直在使用

IF (TIMESTAMPDIFF(MINUTE,c.last_seen,NOW()) > 5) for the first IF condition.

我是触发器的新手,我不知道我的逻辑是否很好,或者是否有更简单或更佳的方法来做到这一点。我想知道我是否可以引入一个标志列来指示客户离开了?

1 个答案:

答案 0 :(得分:0)

这可能为您找到了。

DELIMETER $$
CREATE TRIGGER monitor
AFTER UPDATE
ON clients
FOR EACH ROW
BEGIN
IF (TIMESTAMPDIFF(MINUTE, OLD.last_seen, NEW.last_seen ) > 5)
THEN INSERT INTO client_history (cID, left_left)-- or whichever column here
SELECT NEW.cID, NEW.last_seen FROM client_history;
END IF;
END $$
DELIMETER ;

我认为应该在逻辑中使用NEW.last_seen值而不是NOW()函数。