Я делаю утилиту PHP, которая импортирует и анализирует CSV-файл в $data
, и нужно ли INSERT «новые» строки в базе данных ($saveNew
).INSERT новые строки, UPDATE старые строки: как?
Прямо сейчас, у меня есть немного уродливым беспорядок: (в обобщенном псевдо-PHP)
function synchronize($data,$saveNew) {
$existing_ids = $table->find_all('ID'); //array of ID's in the table
$incoming_ids = get_key('ID',$data); //grabs the ID field from each record
$new_ids = array_diff($incoming_ids,$existing_ids);
foreach ($data as $record) {
if (in_array($record['ID'],$new_ids)) { //it's new
if ($saveNew) $table->insert($record);
else continue;
} else {
$table->update($record);
}
}
}
Для меня это просто имеет запах, и я думаю, что я мог бы сделать это всего один запрос, за исключением того, что я не знаком с SQL.
Я использую простой ORM в своем приложении, но я просто могу просто использовать прямой SQL.
О, и я использую MySQL.
Можно ли это сделать только одним запросом? Похоже, что это была бы общая проблема с простым решением, но я просто не могу понять это.
Это выглядит гораздо лучше, но разве это не будет применяться, только если '$ saveNew' является истинным? Если мы хотим «синхронизировать ($ data, false)», то мы вообще не хотим «INSERT». Есть ли такая вещь, как 'UPDATE IF EXISTS'? –
Нет необходимости в 'UPDATE IF EXISTS' ... когда вы вызываете' UPDATE ... WHERE id = 5', если id '5' не существует, он просто ничего не обновит ... Нет ошибки , просто никаких обновлений ... – ircmaxell
@ircmaxwell: О, ничего себе, поговорим о «духе!» момент для меня. Я, по-видимому, не думаю очень прямо ...: D –