2011-11-26 82 views
1

我正在處理一個連接到MySQL數據庫的PHP CSV導入腳本。如果找到重複項或更新它們,我想讓用戶選擇插入新行。重複密鑰更新(非唯一字段)

我不能使用ON DUPLICATE KEY UPDATE,因爲列不能是唯一的,否則當它們想要重複時不會照顧。

我該怎麼辦?

回答

2

使用2個查詢 - 選擇查詢以確定該行是否存在,然後基於該結果執行插入或更新查詢。

+0

我正在考慮這樣做,但它是做到這一點的最有效的方式?如果它是一個特別大的文件,那麼檢查每一行以查看它是否存在似乎效率很低。 – THEK

1

我會在命令行上使用腳本。在你的循環中,檢查是否存在具有相同密鑰的條目。如果是,請提示用戶決定使用fgets(STDIN)做什麼。

0

爲什麼不只是添加一個UNIQUE鍵到表中,可能跨越多個字段? 這裏是給下面的簡單電話簿表的例子:

CREATE TABLE phonebook (
    firstname VARCHAR(255), 
    lastname VARCHAR(255), 
    home VARCHAR(50), 
    mobile VARCHAR(50) 
) 

您可以輕鬆添加一鍵製作名字和姓氏一起獨一無二的。

ALTER TABLE phonebook ADD UNIQUE (firstname, lastname) 

這樣你可以使用ON DUPLICATE KEY UPDATE語句時,名字已經在名單上輕鬆更新電話號碼:

INSERT INTO phonebook (firstname, lastname, home, mobile) 
VALUES ("john", "doe", "12345", "45678") 
ON DUPLICATE KEY UPDATE home = "12345", mobile = "45678" 

一切越來越不必要的複雜性。