2014-09-10 98 views
1

我一直在尋找從一個表生成一個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) ? 

回答

0

我相信你是後:

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

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