mysql从另一个具有ip范围的表中查找ip地址

mysql从另一个具有ip范围的表中查找ip地址,mysql,Mysql,我有如下两张桌子 client_table date (timestamp) ip (varchar) value1 (int) value2 (int) ip_address_table starting_ip (varchar) ending_ip (varchar) provider (varchar) 我正在尝试查找具有ip地址表的客户端表条目,以查找ip地址在范围内时每小时的平均值。(如果不在范围内,则忽略该行) 下面是我想到的 SELECT avg(value1),

我有如下两张桌子

client_table
 date (timestamp)
 ip (varchar)
 value1 (int)
 value2 (int)

ip_address_table
 starting_ip (varchar)
 ending_ip (varchar)
 provider (varchar)
我正在尝试查找具有ip地址表的客户端表条目,以查找ip地址在范围内时每小时的平均值。(如果不在范围内,则忽略该行) 下面是我想到的

SELECT avg(value1),avg(value2)
FROM client_table
WHERE (INET_ATON(ip) BETWEEN INET_ATON(starting_ip) AND INET_ATON(ending_ip))
GROUP BY DATE(date),HOUR(date)
但是,它没有给出正确的输出。我看了一下,但很难编写一个存储函数来简化任务 谢谢你的帮助

谢谢

编辑:下面是我的示例数据

client_table
"date"  "ip"    "value1"    "value2"
"2012-01-10 06:38:29"   "121.1.2.3" "1049"  "301"
"2012-01-11 06:41:35"   "58.1.2.3"  "16453" "794"
"2012-01-12 06:43:50"   "101.1.2.3" "1712"  "410"
"2012-01-13 06:44:04"   "121.1.10.3"    "6594"  "863"
"2012-01-14 06:45:00"   "79.1.2.3"  "879"   "614"

ip_address_table
"starting_ip" "ending_ip" "provider"
"121.0.0.0" "121.255.255.255" provider1
"79.1.2.0" "79.1.2.255" provider1
....

我看不出您正在使用ip表,也许可以尝试类似的方法(未测试):


感谢您的建议,但是上面的查询似乎没有正确查找ip地址。对于client_表行中的每个ip,需要在ip_address_表中查找(检查该范围是否存在)并提供提供商信息。上述查询是否实现了相同的功能?是的,只需将提供者添加到所选字段中即可。这里我假设每个IP只有一个匹配项,否则同一个IP会有多行。我选择不使用这种方法,因为性能非常差。谢谢大家的帮助
SELECT avg(value1),avg(value2)
FROM client_table c, ip_address_table ip
WHERE (INET_ATON(ip) BETWEEN INET_ATON(starting_ip) AND INET_ATON(ending_ip))
GROUP BY DATE(date),HOUR(date)