我正在尝试检测使用代理滥用我的网站的人。
他们通常会改变代理等等。但肯定有一种模式,他们多次使用一个代理地址。对于合法访客来说,这是正常现象。
通常,我网站的大多数访问都是通过一次或几次访问过的唯一IP地址。不要重复。
假设我在列中有这些IP地址:
89.46.74.56
89.46.74.56
89.46.74.56
91.14.37.249
104.233.103.6
这意味着有5个独特的5个。给予“独特性得分”60%。
我如何使用MySQL有效地计算这个?
答案 0 :(得分:2)
<强>计划强>
- 通过ip获取计数分组
- 除以(交叉加入)总行数
- 从上面获取最大重复率
<强>设置强>
create table example
(
id integer primary key auto_increment not null,
ip varchar(13) not null
);
insert into example
( ip )
values
( '89.46.74.56' ),
( '89.46.74.56' ),
( '89.46.74.56' ),
( '91.14.37.249' ),
( '104.233.103.6' )
;
<强>查询强>
select max(repeat_factor)
from
(
select ip, count(*) / rc.row_count as repeat_factor
from example
cross join ( select count(*) as row_count from example ) rc
group by ip
) q
;
<强>输出强>
+--------------------+
| max(repeat_factor) |
+--------------------+
| 0.6 |
+--------------------+
<强> sqlfiddle 强>