Mysql 仅在5分钟后插入访问
我想插入如下访问:Mysql 仅在5分钟后插入访问,mysql,sql,Mysql,Sql,我想插入如下访问: id - user - visit - data 1 - 1 - 2 - date 2 - 1 - 3 - date 3 - 1 - 2 - date after 5 minutes from the first (id 1) - only insert if it has pasted more than 5 minutes from the last similar record. 用户1访问了用户2和3。 问题是,我希望在前5分钟内插入访问,而不重复访问。在此之后,我
id - user - visit - data
1 - 1 - 2 - date
2 - 1 - 3 - date
3 - 1 - 2 - date after 5 minutes from the first (id 1) - only insert if it has pasted more than 5 minutes from the last similar record.
用户1访问了用户2和3。
问题是,我希望在前5分钟内插入访问,而不重复访问。在此之后,我想插入
我试过:
INSERT INTO visits (user, visit, data)
SELECT '1', '2', NOW() WHERE NOT EXISTS (SELECT 1 FROM visits WHERE user = '1' AND visit = '2' AND data >= DATE_SUB(NOW(), INTERVAL 5 MINUTE))
但它不起作用。有什么想法吗?您可以在插入的
中表达逻辑:
INSERT INTO visits (user, visit, data)
SELECT u.user, u.visit, u.data
FROM (SELECT 1 as user, 2 as visit, NOW() as data) u
WHERE NOT EXISTS (SELECT 1
FROM visits v
WHERE v.user = u.user AND v.visit = u.visit AND
u.data >= DATE_SUB(NOW(), INTERVAL 5 MINUTE)
);
这解决了特定插入的问题。这可能就足够了。但是,您依赖应用程序来确保数据完整性。触发器将确保不会发生违反规则的插入或更新。您可以在插入中表达逻辑:
INSERT INTO visits (user, visit, data)
SELECT u.user, u.visit, u.data
FROM (SELECT 1 as user, 2 as visit, NOW() as data) u
WHERE NOT EXISTS (SELECT 1
FROM visits v
WHERE v.user = u.user AND v.visit = u.visit AND
u.data >= DATE_SUB(NOW(), INTERVAL 5 MINUTE)
);
这解决了特定插入的问题。这可能就足够了。但是,您依赖应用程序来确保数据完整性。触发器将确保不会发生违反您的规则的插入或更新。这似乎是正确的,您能用SQLFIDLE重现问题吗?可能的重复可能需要触发器来解决此问题。@GordonLinoff您能给我举个例子吗?这似乎是正确的,你能用sqlfiddle重现这个问题吗?可能是重复的你可能需要一个触发器来解决这个问题。@GordonLinoff你能给我举个例子吗?