比较表格中的行以获得simularites和diffrence

时间:2016-01-07 16:06:39

标签: mysql

我有一个问题,我需要在网站上阻止机器人,并需要一个帐户列表来阻止

回答的问题是这个。 同一帐户同时使用不同的IP地址。 我需要一个简单的帐号表,我可以快速复制并粘贴到我的安全

如果帐号在同一时间在不同的IP地址下出现2次或更多次,请显示帐号。

以下是我正在使用的表的示例。

Table temp1
 account          ip            last_used   
14K4cHc     79.110.19.199   2016-01-07 09:06:52
17FFhQY     79.110.19.199   2016-01-07 09:06:52
14K4cHc     91.215.136.75   2016-01-07 09:06:52
17FFhQY     91.215.136.75   2016-01-07 09:06:52
15LESsr     193.9.158.98    2016-01-07 09:06:51

第1行到第4行是使用2个不同IP地址同时发送垃圾网站的相同2个帐户的示例,并且是可能的机器人。

1 个答案:

答案 0 :(得分:1)

作为起点,为同一帐户和last_used时间识别不同的IP地址,我们可以使用如下查询:

  SELECT t.account
       , t.last_used
       , COUNT(DISTINCT t.ip) AS cnt_ip
    FROM temp1 t
   GROUP BY t.account, t.last_used
  HAVING COUNT(DISTINCT t.ip) > 1
  ORDER BY t.account, t.last_used

这可能是您实际想要返回的更多行,因为它还会返回last_used的不同值。

GROUP BY折叠指定表达式具有相同值的所有行。在这种情况下,accountlast_used

COUNT(DISTINCT )获取每个折叠组的唯一IP地址数。如果给定accountlast_used值的所有IP地址都是非NULL且相等,则返回值1.我们包含一个HAVING子句来过滤掉那些行只有相同的IP地址。

此查询只是一个起点。它可以用作内联视图,也可以增强。