从mysql表中获取每个ip的计数和总数

问题描述:

我一直在寻找从一个表生成一个IP地址报告并插入到另一个表中,但尚未成功或找到一个资源,这将允许我这样做。从mysql表中获取每个ip的计数和总数

其中包含许多重复的IP的,想分计数(名称)的总和(分钟)

我的IP表,其中每一个不同的IP

ip     name minutes 
199.199.199.199  nick 23 
199.199.199.200  nick 3 
199.199.199.200  bob  34 
199.199.199.201  bob  56 
199.199.199.201  sue  12 
199.199.199.202  sue  45 
199.199.199.202  helen 65 
199.199.199.202  helen 15 

我当前的方法如下

SELECT DISTINCT(distinct) as ip FROM `ip.ip_stats`; 

以我PHP,我添加的每个所述不同的IP addreses的成阵列

$arr = array("199.199.199.199","199.199.199.200","199.199.199.201","199.199.199.202"); 

一旦生成阵列I阵列

foreach($arr as $ip){ 
    SQL ="SELECT COUNT(name) as cnt, SUM(minutes) as sum FROM `ip.ip_stats` WHERE ip='$ip'"; 
    $result = mysqli_query($con, $query); 

    while ($row = mysqli_fetch_assoc($result)) { 
      mysqli_query($con, "INSERT INTO ip.ip_report (ip, count, sum) 
      VALUES ($ip, $cnt, $sum) 
    } 
} 

在通过每个运行所以获取每个IP的总和与计数阵列中我然后依次通过,并插入到报告表后。

我的主要问题是运行这个软件需要多少时间和大量的时间,我有超过一千万行的数据,每分钟只做3-5次(大表,然后是我的例子)。

有没有办法使用mysql来选择不同并生成报告? 有没有办法实现下面的查询?使用循环还是while?

SELECT SUM(minutes), COUNT(name) FROM (SELECT DISTINCT(ip) FROM ip.ip_stats) ? 

我相信你是后:

SELECT s.ip, s.name, SUM(s.minutes) AS TotalMinutes, COUNT(s.name) AS NameCount 
FROM ip_stats s 
GROUP BY s.ip, s.name 
+0

感谢灵儿,这将很好地工作,我完全忘了GROUP BY,这绝对是我一直在寻找答案! – renfley 2014-09-10 16:14:02

SELECT 
    ip, 
    COUNT(name) as cnt, 
    SUM(minutes) as sum 
FROM `ip.ip_stats` 
GROUP BY ip 
;