使用select更新基于查询的列

时间:2013-05-16 13:49:38

标签: mysql

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

我有另一个名为Test2的表,其中包含列source和dest(代表IP的INT)和空列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,我得到了一个好的结果,所以我怎么能在整个桌子上使用它..?

2 个答案:

答案 0 :(得分: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的解决方案,因为此查询使用mysql的multiple-table update syntax

答案 1 :(得分: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']