代码之家  ›  专栏  ›  技术社区  ›  hummingBird

有效IP->位置查询

  •  5
  • hummingBird  · 技术社区  · 15 年前

    我有两张桌子:一张是IP组城市 IpfFoBD.com 包含用于确定IP位置的IP_起始编号,以及包含“IP”列的网站访问者信息的“访问”。

    我需要通过检查“访问”表中每个IP的区域代码来选择前10个区域代码(来自IP_Group_City)。

    现在,我正在将“访问”中的所有IP加载到一个数组中,并使用该IP信息通过以下方式查询IP组城市:

    SELECT region_code
    FROM ip_group_city
    WHERE ip_start <= INET_ATON(IP_FROM_ARR)
    ORDER BY ip_start DESC LIMIT 1
    

    我无法创建某种嵌套查询来为我完成这项工作,因为现在事情有点慢:)-在我的笔记本电脑上,XAMPP需要30秒(AMD Turion x2 2GHz,运行Windows 7 Ultimate 64位版本)

    这是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 ;
    

    谢谢

    4 回复  |  直到 15 年前
        1
  •  2
  •   philfreo    15 年前

    既然你说欢迎其他解决方案…

    你可能想退房 MaxMind . 他们有良好的国家和城市的IP查找。您可以安装一个Apache或PHP插件来加快速度——甚至不需要自己处理数据库。

        2
  •  2
  •   Chad    15 年前

    要索引表,请执行以下操作:

    ALTER TABLE `ip_group_city` ADD INDEX ( `ip_start` )
    

    要获得前10个区域代码:

    SELECT igc.region_code
    FROM ip_group_city igc
    JOIN visits v ON igc.ip_start = v.ip
    GROUP BY igc.region_code
    ORDER BY COUNT(*) DESC
    LIMIT 10
    
        3
  •  0
  •   The Surrican    15 年前
    ALTER TABLE `ip_group_city` ADD INDEX ( `ip_start` )
    

    我只想说这些。确保使用btree而不是hash:d

        4
  •  0
  •   Community Mohan Dere    9 年前

    您可能需要检查此日志:

    Location from ip address

    推荐文章