我想创建一个事件,当lend_date
列已经过了15天时,它会执行INSERT
查询。
它将获得该行的ID和userid
,并将其插入另一个表。
例如:
id | userid | lend_date
---+----------+----------------------
1 | 1 | 2015-09-24 15:58:48
2 | 1 | 2015-09-21 08:22:48
现在,它正是2015-10-06 08:23:41
。因此,事件应该获取第二行的ID,即2
,并将其插入另一个表。
我的活动查询应该是什么样的?
事件类型为RECURRING
。但是我也不确定我是应该每小时还是每天都执行它。对它来说最好的建议是什么?
这比使用Task Scheduler
更好吗?
我想插入获取的ID的另一个表是notification_table
,它会通知用户他/她有一个过期的日期。
notification_table
看起来像这样:
id | userid | notificationid | notificationdate |
---+----------+------------------+----------------------+
1 | 1 | 1 | 2015-09-24 15:58:48 |
2 | 1 | 1 | 2015-09-21 08:22:48 |
我正在查看此查询:
INSERT INTO notification_table (id, userid, notificationid, notificationdate)
SELECT id, userid, 1, NOW()
FROM first_table
WHERE lend_date + INTERVAL 15 DAY = NOW();
答案 0 :(得分:0)
在同一个句子中看到的确切地说, 事件和datetime
让我感到畏缩。为什么?首先,很难得到一个datetime
值与另一个完全匹配。另一方面,事件通常在预定时间之后稍微运行,尤其是在繁忙的数据库服务器上。他们需要一点时间才能启动。
如果您需要记录超过15天的表中的id
值,那么获取它们的时间最精确的方法是查询或查看。
CREATE OR REPLACE VIEW fifteen
AS SELECT id
FROM table
WHERE `datetime` < NOW() - INTERVAL 15 DAY
当然,您可以编写一个事件来将ID复制到新表中。通过在事件中使用此类查询,您将不得不遇到一些麻烦,以确保您不会多次点击相同的ID值。
INSERT INTO newtable (id)
SELECT id
FROM table
WHERE `datetime` < NOW() - INTERVAL 15 DAY
AND id NOT IN (SELECT id FROM newtable)
您应该多久运行一次重复活动?这完全取决于id值在15天之后变成新表需要多快。如果您的应用程序要求它不到一分钟,您真的应该使用视图而不是事件。任何超过一分钟的允许延迟都会让您在该频率上使用重复事件。