从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
答
SELECT
ip,
COUNT(name) as cnt,
SUM(minutes) as sum
FROM `ip.ip_stats`
GROUP BY ip
;
感谢灵儿,这将很好地工作,我完全忘了GROUP BY,这绝对是我一直在寻找答案! – renfley 2014-09-10 16:14:02