codeigniter3,根据时间数据查找总命中数

codeigniter3, find total number of hits based on time data

我有一个 table,我在其中记录了用户 requestFrom 与用户 requestTo 之间针对 requestTime 的请求瞬间。看起来像这样。

id requestFrom requestTo requestTime
1 aaa bbb 10001
2 aaa bbb 10002
3 aaa ccc 10003
4 eee ccc 10004
5 eee ccc 20000
6 eee ccc 20001

我需要对结果进行分组,如果请求发生在增量(比如 2 秒)时间内,并且如果请求发生在相同的 requestFrom and requestTo 之间,它应被视为结果中的一个瞬间。基于此,输出看起来像

time number of hits remark
10002 1 id 1 and 2 combined
10003 1 id 3
10004 1 here id 5 and 6 did not combine with id 4, because delta is > 2
20001 1 id 5 and 6 combined

这里我可以使用group_by(requestFrom, requestTo),但是我如何合并requestTime delta。

如何编写 codeigniter 模型函数以实现上述结果?

我将解释要实现的数学。如果理解了这一点,那么为您的 table.

实施此操作应该没有问题

现在,您已经有了两个聚合。这意味着您的记录按 requestFrom 分组,按 requestFrom 分组的记录进一步按 requestTo 分组。现在,你要 group by 第三个标准。为了定义这样一个标准,你需要先用自己的话来表述它,这样它就可以转化为易于测试的公式:

  1. 我们以不存在早于 delta 的另一个元素的方式识别此类间隔的第一种类型的左侧。
  2. 我们识别此类区间的成员的方式是,我们可以找到一个不比给定元素早超过 delta 的左侧。

这可以通过连接来实现。

但是,从 a 到 b 的请求发送方式可能比左侧更新多于 delta,但从右侧发送的请求比 delta 新。所以,一旦你得到这个结果,你就可以 运行 一个类似的查询,它的不同之处仅在于它会搜索适合这种边缘情况的项目并将它们相似地分组。您可以 运行 这第二个查询,每次按已找到的组和间隔扩展过滤器,直到没有新组。

这是一个绝对有效的解决方案,但它包含多个查询。