我正在制作一个PHP实用程序,用于将CSV文件导入并分析为$data
以及是否向数据库中插入“新”行($saveNew
)。插入新行,更新旧行:如何?
现在,我有一个有点丑陋的烂摊子:(广义伪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)',那么我们根本不想'插入'。有没有更新IF EXISTS这样的东西? – 2010-07-30 15:08:18
当你调用'UPDATE ... WHERE id = 5'时,不需要'UPDATE IF EXISTS' ...如果id不存在'5',它就不会更新任何东西......没有错误,只是没有更新... – ircmaxell 2010-07-30 15:16:48
@ircmaxwell:哦,哇,谈论一个“呃!”我的时刻。我显然不是很直白......:D – 2010-07-30 15:21:06