2012-10-29 22 views
1

可能重複:
How to ‘insert if not exists’ in MySQL?MySQL的 - 插入其中不存在

我有幾個刀片,我只希望他們能夠真正插入,如果沒有已經在相同的信息那裏。

我只想插入運行使用WHERE NOT EXISTS,有人能幫助我添加到我的查詢?

查詢:

$db->Query("INSERT INTO `surfed` (site) VALUES('".$id."')"); 

非常感謝!

+0

我敢說這已被問過。 – mafu

+0

我讀過它們,但它不適用於我的查詢。 – CustomNet

回答

4

使用IGNORE關鍵字

INSERT IGNORE INTO surfed (user, site) VALUES('".$data['id']."', '".$id."') 

如果您對user唯一鍵約束 - site組合那麼它通常會產生重複上一個錯誤並中止插入。在插入語句中使用ignore將忽略錯誤並且不插入任何內容。

如果使用IGNORE關鍵字,則執行INSERT語句時發生的錯誤將被視爲警告。 ...使用IGNORE時,該行仍未插入,但未發出錯誤。

關於它

SQLFiddle example

+0

那麼通過使用您提供的代碼,它只會提交到數據庫中,如果它尚不存在並且不會產生任何錯誤? – CustomNet

+0

是的。如果你在'user'-'site'組合上有唯一的鍵約束。 –

+0

這似乎沒有工作,我已經刪除了INSERT中的用戶,因爲我只想要網站提交。所以現在它看起來像: $ db-> Query(「INSERT IGNORE INTO'surfed'(site)VALUES('」。$ id。「')」); + $ db-> Query(「INSERT IGNORE INTO'surfed'(site)VALUES('」。$ sit ['id']。「')」); 基本上很多人查看很多不同的網站,但我只想要一個特定的網站提交一次到網站欄。 – CustomNet

0

首先更多的相關信息,請參見here你的兩列需要是一個組合鍵,那麼你可以使用INSERT IGNORE所概述的于爾根·d或使用

ON DUPLICATE KEY UPDATE user=user 

在這裏可以看到類似的問題: INSERT ... ON DUPLICATE KEY (do nothing)

對於僅具有一個網站欄的修訂問題,確保該網站列是唯一鍵或主鍵然後用

$db->Query("INSERT INTO `surfed` (site) VALUES('".$id."') ON DUPLICATE KEY UPDATE site=site"); 
+0

嘿,感謝您的回覆,但我已經刪除了用戶列,我只希望該網站被提交。如果該網站已經提交,那麼我不希望它再次提交。你能告訴我如何做到這一點? – CustomNet

0

你應該能夠去與mysql_num_rows。如果返回值爲0,那麼表中沒有任何內容匹配你想要插入的內容。 (不存在)。 因此,使「如果mysql_num_rows = 0,然後插入別的什麼都不做」。