2013-05-16 3 views
1

У меня есть база данных, которые я импортируемая в таблицу под названием ip2city, который содержит 3 колонков (startipint,endipint,country) , что связывает заданный диапазон IP (представленный в целом числе) к конкретной странестолбцов обновления на основе запроса с выбором

I есть еще одна таблица называется Test2, что содержащий источник столбцов и 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... предполагают, чтобы вернуть значение, я хочу, чтобы вставить в таблицу но dosnt похоже на работу

, когда я просто использовать

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

с конкретным ip, я получаю хороший результат, так как я могу использовать его на всей таблице ..?

+0

Какое сообщение об ошибке? – fancyPants

ответ

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'] 
+0

Это вообще не нужно PHP – Drew

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's multiple-table update syntax.

Смежные вопросы