我有一个数据库,我将其导入到一个名为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,我得到了一个好的结果,所以我怎么能在整个桌子上使用它..?
答案 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']