复杂的MySQL从旧表连接到新表

时间:2011-02-18 01:24:08

标签: php sql mysql spatial-index

我有一个名为locations的旧数据库,其中一个表位于命名位置。

此表有7个变量:id(int,index),approved(int),city(text),country(text),heading(double),lat(double),lng(double)。

我有一个名为复杂性的新数据库。 该数据库有一个名为gsvraw

的新表

我需要将旧表复制到新表中,但这是一个棘手的问题:

新数据库将使用MySQL的空间索引,以便稍后我可以在多边形内搜索。在新数据库中,我想添加一个名为location的新列,而不是lat,lng。

创建新列的示例语句:

ALTER TABLE gsvraw ADD location POINT NOT NULL;
CREATE SPATIAL INDEX location ON gsvraw (location);

这是一个将新值插入位置列的示例语句:

INSERT INTO gsvraw (location) VALUES( GeomFromText( 'POINT(40 -100)' ));

40和-100将是lat和lng。

有什么想法吗?

我在麻省理工学院的三个不同的“大师”中浪费了一个小时,而且几乎无处可去。

我正在运行的服务器导致严重问题,因此使用python和MySQLdb已经完成了。

希望有人比我们聪明,可以帮助处理原始的sql语句。

我在使用MAMP pro的Apache MySQL和PHP的Mac上运行它。这会导致一些麻烦,所以唯一可行的解​​决方案是直接的php和sql。 有什么想法吗?

解决方案:

<?php
$con = mysql_pconnect("localhost","username","password");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }
mysql_select_db("database1", $con);


$result = mysql_query("SELECT * FROM database1 WHERE ") 
or die(mysql_error());  

$con2 = mysql_pconnect("localhost","username","password");
if (!$con2)
  {
  die('Could not connect: ' . mysql_error());
  }
mysql_select_db("complexity", $con2);

while($row = mysql_fetch_array( $result )) {

    mysql_query("INSERT INTO table1 (id, approved, city, country, heading, location) VALUES ('".$row['id']."', '".$row['approved']."', '".$row['city']."', '".$row['country']."', '".$row['heading']."', PointFromText('POINT(".$row['lng']." ".$row['lat'].")'))", $con2);

} 
?>

1 个答案:

答案 0 :(得分:0)

您是否尝试过PointFromText函数?

set location = PointFromText(CONCAT('POINT(',latitude,' ',longitude,')'));