如何从ip2location ip数据库中选择多个ip信息?

时间:2019-04-17 19:05:57

标签: sql postgresql

我正在尝试从IP地址存储在范围中的数据库中选择多个IP地址的IP信息。数据库中的简单行如下所示:

 ip_from  |  ip_to   | country_code | city_name
----------+----------+--------------+-----------
        0 | 16777215 | -            | -
 16777216 | 16777471 | AU           | Brisbane
 16777472 | 16778239 | CN           | Fuzhou

我需要编写一个查询,在其中我可以将IP列表作为整数传递(例如16777221、16777490),并且它应该返回如下结果:

 ip       | country_code | city_name
----------+--------------+-----------
 16777221 | AU           | Brisbane
 16777490 | CN           | Fuzhou

当前,我通过以下查询获取一个IP地址的信息: select * from ip_table where 16777221 <= ip_to order by ip_to limit 1;

2 个答案:

答案 0 :(得分:2)

您可以加入由VALUES生成的集合。

SELECT v.ip,
       i.country_code,
       i.city_name
       FROM (VALUES (16777221),
                    (16777490)) v (ip)
            LEFT JOIN ip_table i
                      ON i.ip_from <= v.ip
                         AND i.ip_to >= v.ip;

db<>fiddle

如果要排除在ip_table中找不到匹配项的行,请将左侧联接更改为内部联接。

答案 1 :(得分:0)

使用IN关键字。

SELECT * FROM ip_table在ip_to IN(16777221,16777490)