2017-09-23 6 views
0

私は、ジオメトリフィーチャをデータベースにインポートするためにスクリプトを使用しています。私は下のスクリプトを支出するでしょう。このスクリプトは、すべてのgeo_featuresをインポートすると効果的です。しかし、私の問題は、私はいくつかの機能を変更したい場合、このスクリプトはテーブル全体を削除し、変更だけを入力します。私がインポートしているファイルには、追加する新しい機能や変更が必要なだけです。既存のデータベースにジオメトリフィーチャを変更する

テーブルには1000個の行が含まれています。それを空にするなどはオプションではありません。

DBの既存のテーブルに追加したい場合、またはDBのテーブルにすでにある行を変更する場合は、このスクリプトをどのように変更するかを教えてもらえますか?

スクリプト:

<?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を実行すると、すべてを削除するよりも、 ID値のような特定の条件を満たすものだけをテーブルから削除するよりDELETE FROM TABLE WHERE(条件)を実行すると、リストにあります。 idsを指定できない場合は、それらの行を特定する方法を規定する必要があります。

また、DELETE/INSERTではなく、UPDATE句を使用できます。

関連する問題