有效ip->位置查询
我有两个表:一个是来自 ipinfodb.com 的 ip_group_city,其中包含用于确定 IP 位置的 ip_start 编号,另一个是“访问”,其中包含有关包含“ip”列的网站访问者的信息。
我需要通过检查“访问”表中每个 IP 的区域代码来选择前 10 个区域代码(来自 ip_group_city)。
现在,我正在将“访问”中的所有 IP 加载到数组中,并使用该 IP 信息通过以下方式查询 ip_group_city:
SELECT region_code
FROM ip_group_city
WHERE ip_start <= INET_ATON(IP_FROM_ARR)
ORDER BY ip_start DESC LIMIT 1
我无法创建某种嵌套查询来为我完成这项工作,因为现在事情是有点慢:) - 在我的笔记本电脑 xampp(AMD Turion x2 2GHz,运行 Windows 7 旗舰版 64 位版本)上最多需要 30 秒
这是包含 IP 地址(访问)的表格,
CREATE TABLE IF NOT EXISTS `visits` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`clientid` mediumint(8) unsigned NOT NULL,
`ip` varchar(15) NOT NULL,
`url` varchar(512) NOT NULL,
`client_version` varchar(64) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=49272 ;
谢谢
I have two tables: one is ip_group_city from ipinfodb.com containing ip_start numbers for determining location of IPs, and other is "visits" with information about web site visitor containing column 'ip'.
I need to select top 10 region_code (from ip_group_city) by checking region_code for each IP from "visits" table.
Right now I'm loading all IPs from "visits" into an array and using that IP info to query the ip_group_city by:
SELECT region_code
FROM ip_group_city
WHERE ip_start <= INET_ATON(IP_FROM_ARR)
ORDER BY ip_start DESC LIMIT 1
I'm unable to create some sort of nested query to do the job for me, because right now things are a bit slow :) - it takes up to 30s on my laptop xampp (AMD Turion x2 2GHz, running windows 7 ultimate 64bit version)
Here's the table with IP addresses (visits)
CREATE TABLE IF NOT EXISTS `visits` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`clientid` mediumint(8) unsigned NOT NULL,
`ip` varchar(15) NOT NULL,
`url` varchar(512) NOT NULL,
`client_version` varchar(64) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=49272 ;
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
既然您说欢迎其他解决方案...
您可能想查看 MaxMind。他们可以通过 IP 进行良好的国家和城市查找。您可以安装 Apache 或 PHP 插件来提高速度 - 甚至不必自己处理数据库。
Since you said other solutions are welcomed...
You might want to check out MaxMind. They have good country and city lookups by IP. You can install an Apache or PHP plugin to make it fast - don't even have to handle the database yourself.
为表建立索引:
获取前 10 个区域代码:
To index your table:
To get the top 10 region_codes:
这就是我要说的。一定要使用 btree 而不是 hash :D
thats all i'm saying. be sure to use btree and not hash :D