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你能给我举个例子吗?