2012-10-16 142 views
1

您好我有一个邮政编码数据库,其中包含邮政编码和lat和lon的详细信息,在另一个表中我有一个公司的邮政编码列表,并希望添加lat和lon的细节匹配邮编,而不是使用连接查询等。下面是我使用的代码,我曾经使用类似的东西,但我只是不能解决为什么这是行不通的。不能更新记录从一个表到另一个

$host = "localhost"; 
$username = ""; 
$password = ""; 
$database = ""; 
mysql_connect($host, $username, $password); 
mysql_select_db($database) or die("Unable to select database"); 


$query = "SELECT * FROM postcodes";  
$result = mysql_query($query) or die(mysql_error()); 
while($row = mysql_fetch_array($result)){ 



$postcode = $row['postcode']; 
$lat = $row['lat']; 
$lon = $row['lon']; 



$result = mysql_query("UPDATE companies SET lat ='$lat' and lng ='$lon' 
WHERE postal_code = '$postcode'") 
or die(mysql_error()); 

} 

我得到的错误是:警告:mysql_fetch_array():提供的参数不是在/home/visitrac/public_html/postcode.php一个有效的MySQL结果资源上线15

如果我移动闭括号,所以它是在更新之前,然后错误去,但没有信息进入数据库,我认为是因为它是在循环之外。我尝试了各种各样的东西,但似乎没有任何工作,所以任何推动正确的方向将不胜感激。

感谢

回答

0

真的没有必要通过邮政编码结果的循环。您可以使用单个SQL语句更新所有公司。

UPDATE companies c 
    INNER JOIN postcodes p 
     ON c.postal_code = p.postcode 
    SET c.lat = p.lat, 
     c.lng = p.lon 
+0

OP表示他不想使用联合 – AnandPhadke

+0

@AnandPhadke:除非OP能够提出施加该限制的有效理由,否则这听起来不合理并导致更昂贵的更新过程。我相信我的回答是完成这项任务的更好方法。 –

+0

对不起,我想我写错了,当我说不使用连接时,我的意思是将数据作为连接查询从数据库中取出,而不是更新公司数据。我从来没有想过使用联接作为更新,所以这是完美的谢谢你,并为此感到抱歉。 –

0

试试这个:

"UPDATE companies SET lat ='"+$lat+"' and lng ='"+$lon+"' 
WHERE postal_code = '"+$postcode+"'" 
+0

谢谢,我做了这个改变,它现在给出了这个错误:你的SQL语法有错误;检查对应于你的MySQL服务器版本的手册,在第1行'55 .017348077'附近使用正确的语法。 –

+0

你能打印这个更新查询字符串吗? – AnandPhadke

相关问题