1

我有一个数据库,我将它导入到一个名为的表中,该表ip2city包含 3 列,这些列(startipint,endipint,country) 将给定的 IP 范围(以整数表示)链接到特定的国家

我有另一个表Test2,它包含列 source 和 dest(INT代表 IP)和空列countryS, countryD 我想根据表中的数据填充空列ip2city

我是 mysql 新手

我尝试了一些看起来像的东西:

UPDATE Test2    
SET CountryS = (SELECT Country FROM `ip2city` WHERE startipint <= Test2.`Source` 
                ORDER BY startipint DESC LIMIT 1);

假设在哪里select...返回我想插入到表中的值,但它似乎不起作用

当我只是使用

SELECT * FROM `ip2city` WHERE startipint <= 3232235521 ORDER BY startipint DESC LIMIT 1

使用特定的 ip,我得到了很好的结果,那么我如何在整个桌子上使用它..?

4

2 回答 2

2

尝试这个:

UPDATE Test2
JOIN ip2city s ON Test2.Source between s.startipint and s.endipint
JOIN ip2city d ON Test2.Dest between d.startipint and d.endipint
SET CountryS = s.country, CountryD = d.country

请注意,这是一个 mysql-only 解决方案,因为此查询使用 mysql 的多表更新语法

于 2013-05-16T13:57:31.773 回答
0
  $result = mysql_query("SELECT * FROM ip2city WHERE startipint <= 3232235521 ORDER BY startipint DESC LIMIT 1");
    while ($row = mysql_fetch_array($result) {
    echo $row['columnname'];

现在您可以在 UPDATE 查询中使用它,如下所示:

UPDATE Test2
SET CountryS = $row['columnname']
于 2013-05-16T13:55:47.030 回答