2011-12-22 43 views
0

我有一個xml文件,其中包含我想要插入到mysql數據庫中的數據。現在我已經在我的數據庫中有條目了,所以應該更新這些條目,不應該添加現有條目並且 - 現在出現問題 - 數據庫中但不包含在xml中的條目應該被刪除。因此,我試圖創造2個陣列,包含XML數據的一些比較值之一,因此例如 $array_new["some1"] = "test"; $array_new["some2] = "test2";如何從mysql數據庫中刪除不在數組中的所有元素?

,幷包含舊數據,如$array_old["some1"] = "something"; $array_old["some2"] = "test2";

現在另外一個我想這兩個比較數組並將所有不在兩者中的值添加到新數組中。我嘗試使用array_diff,但這隻會將不在兩個數組中的一個值添加到新數組中。但是我需要在新數組中擁有所有具有相同鍵的值,以便我可以刪除它們。

任何人有任何想法如何做到這一點?謝謝!

回答

3

假設你的表有一個唯一索引(主鍵)和XML數據具有相同的密鑰數據可用,請按照下列步驟操作:

1)從表中刪除不屬於您的陣列中的所有記錄:

DELETE FROM tablename WHERE unique_field NOT IN (<comma seperated list or keys>) 

2)運行一個INSERT ...對重複密鑰更新類型的查詢:

INSERT INTO tablename VALUES (a, b, c) ON DUPLICATE KEY UPDATE field1 = a, ... 
+0

謝謝,我會試試!然後,我可以在NOT IN之後添加implode(「,」,$ array),不是嗎? – phpheini 2011-12-22 16:39:52

+0

是的,我只是顯示你需要使用的SQL語句。我省略了關於如何獲取逗號分隔的唯一鍵列表的細節,因爲它取決於您的數據源。如果你有一個只包含唯一鍵值的數組,那麼你可以爲NOT IN()的內部implode(「,」,$ array) – 2011-12-22 22:46:04

0

創建使用「not in」只有你創建標識符的where子句,像implode(",", $array)

相關問題