我被指派开发一个简单的点击计数器。我的表格如下 -
ID | userID | IP | entityType| entityID | date
-----+--------+-----------+-----------+----------+--------------------
1 | 1 | 127.0.0.1 | book | 18 | 2017-01-27 10:02:12
2 | 1 | 127.0.0.1 | book | 18 | 2017-01-27 10:02:30
3 | 1 | 127.0.0.1 | book | 18 | 2017-01-27 10:02:42
4 | 1 | 127.0.0.1 | book | 18 | 2017-01-27 10:02:48
5 | 1 | 127.0.0.1 | book | 18 | 2017-01-27 10:02:56
6 | 1 | 127.0.0.1 | book | 18 | 2017-01-27 10:03:03
7 | 1 | 127.0.0.1 | book | 18 | 2017-01-27 10:03:21
8 | 1 | 127.0.0.1 | book | 18 | 2017-01-27 10:03:31
9 | 1 | 127.0.0.1 | book | 18 | 2017-01-27 10:03:38
10 | 1 | 127.0.0.1 | book | 18 | 2017-01-27 10:03:44
11 | 1 | 127.0.0.1 | book | 18 | 2017-01-27 10:04:01
12 | 1 | 127.0.0.1 | book | 18 | 2017-01-27 10:04:13
13 | 1 | 127.0.0.1 | book | 18 | 2017-01-27 10:04:30
14 | 1 | 127.0.0.1 | book | 18 | 2017-01-27 10:04:37
15 | 1 | 127.0.0.1 | book | 18 | 2017-01-27 10:04:56
16 | 1 | 127.0.0.1 | book | 18 | 2017-01-27 10:05:10
17 | 1 | 127.0.0.1 | book | 18 | 2017-01-27 10:05:18
18 | 1 | 127.0.0.1 | book | 18 | 2017-01-27 10:05:41
18 | 1 | 127.0.0.1 | book | 18 | 2017-01-27 10:05:56
19 | 1 | 127.0.0.1 | book | 18 | 2017-01-27 10:06:15
20 | 1 | 127.0.0.1 | book | 18 | 2017-01-27 10:06:26
21 | 1 | 127.0.0.1 | book | 18 | 2017-01-27 10:06:43
22 | 1 | 127.0.0.1 | book | 18 | 2017-01-27 10:06:58
23 | 1 | 127.0.0.1 | book | 18 | 2017-01-27 10:07:21
我的问题是我需要根据时间间隔对结果进行分组。该间隔将由项目经理稍后定义,可以在1分钟到30分钟之间变化。背后的想法是,如果特定用户在定义的时间间隔内多次访问具有特定ID(实体ID)的特定页面(实体),则所有这些命中将被计为单击。将在此时间间隔内运行cronjob以累积然后存储在不同的表中。
我无法弄清楚应该如何接近。我真的很期待有一些指南。
提前致谢。
修改
由于我的问题被许多用户标记为某个问题的完全重复,因此我对于不充分解释我的问题感到内疚。
在我的问题被标记为完全重复的问题中,预期结果是计算的时间间隔。但我的问题与此不同。我需要一个解决方案,我可以在一个时间间隔内只计算一个。请考虑下表 -
ID | userID | IP | entityType| entityID | date
-----+--------+-----------+-----------+----------+--------------------
1 | 4 | 127.0.0.1 | book | 18 | 2017-01-27 10:02:12
2 | 4 | 127.0.0.1 | book | 18 | 2017-01-27 10:02:30
3 | 4 | 127.0.0.1 | book | 18 | 2017-01-27 10:02:42
4 | 4 | 127.0.0.1 | book | 18 | 2017-01-27 10:03:08
5 | 4 | 127.0.0.1 | book | 18 | 2017-01-27 10:03:27
假设我的预期时间间隔定义为1 minute
。请注意,示例userID
4
在entityID
时间间隔18
内访问了相同的1 minute
(2017-01-27 10:02:12 - 2017-01-27 10:03:11)
4次。在这种情况下,命中应该计为1.因此只有COUNT(*)
不足以实现我的结果。我想我需要使用mysql rank函数来解决它。但无法弄清楚如何。
我已更新我的示例数据集以描述特定案例。让我们假设我的时间间隔阈值是1分钟。根据我的原始数据,我希望结果如下 -
entityType| entityID | count
----------+----------+-------
book | 18 | 5
由于entity
book
与entityID
18
的第一个匹配条目为2017-01-27 10:02:12
,因此应将时间间隔视为2017-01-27 10:02:12 to 2017-01-27 10:03:11
。在此时间间隔之后,同一userID
,entity
和entityID
的下一个条目为2017-01-27 10:03:21
,以便时间间隔为2017-01-27 10:03:21 to 2017-01-27 10:04:20
同一2017-01-27 10:02:12
2017-01-27 10:03:11
和entity
book
entityID
至18
中有5个条目应计为一个条目。类似地,对于其余的行,应该总共有5个唯一的命中。
感谢任何帮助。
提前致谢。