我正在製作一個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