MySQL 在 Table A 上触发,使用 TIMESTAMPDIFF() 插入或更新 table B
MySQL Trigger on Table A, INSERT OR UPDATE table B with TIMESTAMPDIFF()
我有 2 个表 - clients 和 client_history。
CLIENTS:
cID | last_seen (LAST_SEEN is updated every 2 mins by my application)
CLIENT_HISTORY :
ID | cID | left_left | time_arrived
我正在尝试:
随着时间的推移记录客户的来来去去。因此,当 clients.last_seen 早于 5 分钟时,使用 cID 和 clients.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.
我是触发器的新手,我不知道我的逻辑是否正确,或者是否有更简单或更好的方法来执行此操作。我想知道我是否可以引入一个标志列来指示客户离开或类似的东西。
这可能适合你。
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()
函数。
我有 2 个表 - clients 和 client_history。
CLIENTS:
cID | last_seen (LAST_SEEN is updated every 2 mins by my application)
CLIENT_HISTORY :
ID | cID | left_left | time_arrived
我正在尝试:
随着时间的推移记录客户的来来去去。因此,当 clients.last_seen 早于 5 分钟时,使用 cID 和 clients.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.
我是触发器的新手,我不知道我的逻辑是否正确,或者是否有更简单或更好的方法来执行此操作。我想知道我是否可以引入一个标志列来指示客户离开或类似的东西。
这可能适合你。
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()
函数。