首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >数据库中Ip地址比较

数据库中Ip地址比较
EN

Stack Overflow用户
提问于 2014-05-05 06:37:16
回答 8查看 1.5K关注 0票数 8

我试图解决一个问题,可以比较两列在一个表。表如下

代码语言:javascript
运行
复制
------------------------------------------
|  from    |    to           |  Country  |
------------------------------------------
| 25.0.0.1 | 25.255.255.255  |  denmark  |
------------------------------------------
| 68.0.0.1 | 68.255.255.255  |  USA      |

我的问题是,我有一个25.195.32.0的ip,我想将它与fromto列进行比较,并返回country name

EN

回答 8

Stack Overflow用户

发布于 2014-05-05 06:47:46

您可以使用INET_ATON获取要比较的IP的数值。

代码语言:javascript
运行
复制
SELECT country FROM table
WHERE INET_ATON('25.195.32.0') BETWEEN INET_ATON(from) AND INET_ATON(to)

inet-aton

票数 13
EN

Stack Overflow用户

发布于 2014-05-05 06:48:40

您可以通过使用IN()OR找到使用AND尝试条件

代码语言:javascript
运行
复制
WHERE from IN('your_ip') OR to IN('your_ip')
票数 1
EN

Stack Overflow用户

发布于 2014-05-05 06:50:11

将IP转换为整数,然后比较整数是简单的。MySQL提供了这样做的inet_aton函数。

代码语言:javascript
运行
复制
select Country from table_name where inet_aton($ip) between inet_aton(`from`) and inet_aton(`ip`);

为了提高性能,应该将列fromto转换为整数。例如:添加到列from_nto_n。然后您的SQL将如下所示:

代码语言:javascript
运行
复制
select Country from table_name where inet_aton($ip) between `from_n` and `to_n`

如果不使用MySQL,则应该首先将$ip转换为整数$ip_n (使用类似于Python的socket.inet_aton),然后将inet_aton($ip)替换为$ip_n

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23466291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档