【问题标题】:Get the location from the DB-IP database against our IP addlist根据我们的 IP addlist 从 DB-IP 数据库中获取位置
【发布时间】:2015-07-01 21:36:13
【问题描述】:

我们从 DB-IP.com 下载了这个带有位置/国家的 IP 地址列表。

他们拥有的结构化数据如下,您可以看到它的范围,而不是单个 IP。我们称之为 IPAddress_table。

IPStart; IPEnd; Country; State; City
0.0.0.0 0.255.255.255   US  California  Los Angeles
1.0.0.0 1.0.0.255   AU  Queensland  South Brisbane
1.0.1.0 1.0.3.255   CN  Fujian  Fuzhou
1.0.4.0 1.0.7.255   AU  Victoria    Melbourne
1.0.8.0 1.0.15.255  CN  Guangdong   Guangzhou

在我们的数据库用户 (user_table) 中,我们有超过 100,000 多个具有 IP 地址的用户。

我如何在 MySQL 中加入这两个表,因为 IP 地址源是范围开始?

感谢您的反馈。

谢谢

【问题讨论】:

标签: mysql ip-address


【解决方案1】:

尝试以下操作:

Assuming table names are IPAddress_table and user_table
Assuming Field Names are:
user_table : IPAddress (and others), 
IPAddress_table: IPStart, IPEnd (and others)

SQL 尝试:

SELECT user_table.*, IPAddress_table.*
FROM user_table 
  INNER JOIN IPAddress_table 
    ON INET_ATON(user_table.IPAddress) 
      BETWEEN INET_ATON(IPAddress_table.IPStart) 
        AND INET_ATON(IPAddress_table.IPEnd)

编辑:您可能希望将其更改为 LEFT JOIN 以获取所有用户,即使 IP 范围不适合。

【讨论】:

  • 没有意识到有这样的功能 - INET_ATON。会试试这个。谢谢
  • 当然。请尝试并告诉我们。我知道它会根据需要工作,因为我在发送之前使用您的表结构对其进行了测试。但是,超过 100000 条记录可能会导致查询缓慢,这是主题的另一面。
猜你喜欢
  • 2010-12-25
  • 1970-01-01
  • 1970-01-01
  • 2011-11-12
  • 1970-01-01
  • 1970-01-01
  • 2016-09-11
  • 2014-04-13
  • 2015-11-09
相关资源
最近更新 更多