2017-09-23 119 views
0

我正在使用腳本將幾何特徵導入數據庫。我將花費下面的腳本。如果導入所有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!"; 
?> 

回答

0

在聲明

mysqli_query($conn,"DELETE FROM geo_features") 

您還應該添加一個部分,如:

where id in (...list of ids...) 

,並列出所有的ID(...)。如果您只運行DELETE FROM TABLE,則會刪除所有內容。如果您運行的DELETE FROM TABLE WHERE(標準)比您從表中刪除的東西只滿足特定條件,如id值在列表中。 如果你不能提供ID,比你必須提出規則如何確定這些行。

另外,可以使用UPDATE子句代替DELETE/INSERT。

相關問題