将几何特征更改为现有数据库
Posted
技术标签:
【中文标题】将几何特征更改为现有数据库【英文标题】:change geometry feature to existing database 【发布时间】:2018-03-05 00:34:59 【问题描述】:我正在使用脚本将几何特征导入数据库。我将花费下面的脚本。如果导入所有 geo_features,该脚本效果很好。但是我的问题是,如果我想更改某些功能,则此脚本会删除整个表并仅输入更改。因为我正在导入的文件只有要添加的新功能,或者需要进行的更改。
该表包含 1000 行。所以清空它等不是一种选择。
有人可以指导我如何调整这个脚本,以便我想添加到数据库中的现有表中,或者更改数据库中表中已经存在的行吗?
脚本:
<?php
define('DBHOST', 'localhost');
define('DBUSER', 'root');
define('DBPASS', '');
define('DBNAME', 'sample');
$conn = mysqli_connect(DBHOST,DBUSER,DBPASS,DBNAME);
$file=file_get_contents("wf.geojson");
$contents=json_decode($file);
echo "processing...";
mysqli_query($conn,"DELETE FROM geo_features") or die("delete error");
for($i=0;$i<count($contents->features);$i++)
$type=$contents->features[$i]->properties->type;
$name=$contents->features[$i]->properties->name;
$aisle=$contents->features[$i]->properties->aisle;
$floormap_id=$contents->features[$i]->properties->id;
$g=$contents->features[$i]->geometry->coordinates[0];
$gt=$g[0][0]." ".$g[0][1];
for($j=1;$j<count($g);$j++)
$gt.=",".$g[$j][0]." ".$g[$j][1];
$geometry="POLYGON((".$gt."))";
$sql="insert into geo_features
(id,geometry,type,name,floormap_id)
values('$floormap_id',GeomFromText('$geometry'),
'$type','$name','1')";
echo $sql;
mysqli_query($conn,$sql) or die("error");
echo "success!";
?>
【问题讨论】:
【参考方案1】:在声明中
mysqli_query($conn,"DELETE FROM geo_features")
您还应该添加如下部分:
where id in (...list of ids...)
并列出 (...) 中的所有 id。如果您只运行 DELETE FROM TABLE,那么您将删除所有内容。如果您运行 DELETE FROM TABLE WHERE (criteria) 而不是从表中删除仅满足特定条件的内容,例如 id 值在列表中。 如果您无法提供 id,则必须制定规则来确定这些行。
此外,您可以使用 UPDATE 子句代替 DELETE/INSERT。
【讨论】:
以上是关于将几何特征更改为现有数据库的主要内容,如果未能解决你的问题,请参考以下文章
如何将现有列表更改为新列表? || android - firebase 实时数据库
将现有 SQL Server 2005 数据库中的数据类型 varchar 更改为 nvarchar。有啥问题吗?