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
第三个标准。为了定义这样一个标准,你需要先用自己的话来表述它,这样它就可以转化为易于测试的公式:
- 我们以不存在早于 delta 的另一个元素的方式识别此类间隔的第一种类型的左侧。
- 我们识别此类区间的成员的方式是,我们可以找到一个不比给定元素早超过 delta 的左侧。
这可以通过连接来实现。
但是,从 a 到 b 的请求发送方式可能比左侧更新多于 delta,但从右侧发送的请求比 delta 新。所以,一旦你得到这个结果,你就可以 运行 一个类似的查询,它的不同之处仅在于它会搜索适合这种边缘情况的项目并将它们相似地分组。您可以 运行 这第二个查询,每次按已找到的组和间隔扩展过滤器,直到没有新组。
这是一个绝对有效的解决方案,但它包含多个查询。
我有一个 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
第三个标准。为了定义这样一个标准,你需要先用自己的话来表述它,这样它就可以转化为易于测试的公式:
- 我们以不存在早于 delta 的另一个元素的方式识别此类间隔的第一种类型的左侧。
- 我们识别此类区间的成员的方式是,我们可以找到一个不比给定元素早超过 delta 的左侧。
这可以通过连接来实现。
但是,从 a 到 b 的请求发送方式可能比左侧更新多于 delta,但从右侧发送的请求比 delta 新。所以,一旦你得到这个结果,你就可以 运行 一个类似的查询,它的不同之处仅在于它会搜索适合这种边缘情况的项目并将它们相似地分组。您可以 运行 这第二个查询,每次按已找到的组和间隔扩展过滤器,直到没有新组。
这是一个绝对有效的解决方案,但它包含多个查询。