【发布时间】:2012-04-05 12:33:09
【问题描述】:
假设我有下表:
CREATE TABLE `occurences` (
`object_id` int(10) NOT NULL,
`seen_timestamp` int(10) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
其中包含对象的 ID(不唯一,它重复)和观察到此对象 ID 的时间戳。
观察 24/7 全天候运行,并插入带有当前时间戳的每个对象 ID。
现在我想编写查询以选择在任何 10 分钟内至少出现 7 次的所有对象 ID。
它应该像入侵检测一样起作用。
denyhost 脚本中使用了类似的算法来检查无效的 SSH 登录。 如果在配置的时间段内找到配置的出现次数,它会阻止 IP。
有什么好的建议吗?
【问题讨论】:
-
为什么要将时间戳存储为整数值?
-
因为我对确切的时间/日期不感兴趣,但对出现之间的差异不感兴趣。使用整数进行计算比我预期的更快
-
@rkosegi,你需要纯 mysql 答案还是 PHP 混合可以?
-
我根本没有使用 PHP,我知道如何使用附加代码,所以需要纯 SQL。