【发布时间】:2018-10-30 14:59:51
【问题描述】:
我有 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.
我是触发器的新手,我不知道我的逻辑是否良好,或者是否有更简单或更好的方法来做到这一点。我想知道是否可以引入一个标志列来指示客户离开或类似的东西。
【问题讨论】:
-
不使用
new和old数据时;使用触发器没有任何意义 -
你是说我应该修改我的 SQL 吗?
-
我建议你在谷歌上搜索一些关于触发器的好教程。它将在触发器的上下文中解释
NEW和OLD关键字的含义。如果您不使用这些;为您的活动使用触发器没有任何意义 -
谢谢,我在这方面搜索了很多东西,但找不到解决方案,这就是我在这里发帖的原因。我已将尝试使用 OLD 关键字的内容添加到 OP。
-
如果我了解您的问题,正确的触发器不是适合您的解决方案。您想在一段时间内更新 client_history 表,而不是日期本身的变化。这种情况的正确解决方案是使用 MySQL 事件:这是一个示例:stackoverflow.com/a/12726805/460557 和文档:dev.mysql.com/doc/refman/5.7/en/event-scheduler.html