Я использую скрипт для импорта геометрических объектов в базу данных. Я опишу сценарий ниже. Скрипт отлично работает, если импортировать все 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!";
?>
В заявлении
mysqli_query($conn,"DELETE FROM geo_features")
Вы также должны добавить часть как:
where id in (...list of ids...)
И перечислить все идентификаторы в (…). Если вы запускаете только DELETE FROM TABLE, вы удаляете все. Если вы запускаете DELETE FROM TABLE WHERE (критерии), то вы удаляете из таблицы вещи, которые удовлетворяют только определенным критериям, например, значения id находятся в списке.
Если вы не можете предоставить идентификаторы, то вам нужно придумать правила, как определять эти строки.
Кроме того, вместо DELETE / INSERT вы можете использовать предложение UPDATE.
Других решений пока нет …