使用MySQL计算IP地址列的变化

时间:2015-12-31 11:38:47

标签: mysql ip ip-address standard-deviation variance

我正在尝试检测使用代理滥用我的网站的人。

他们通常会改变代理等等。但肯定有一种模式,他们多次使用一个代理地址。对于合法访客来说,这是正常现象。

通常,我网站的大多数访问都是通过一次或几次访问过的唯一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有效地计算这个?

1 个答案:

答案 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