2012-12-06 36 views
0

我對我的SQL查詢有點麻煩,並且一直在收到我找不到的語法錯誤。SQL INSERT新行如果列值不存在

有問題的查詢:

INSERT INTO $db (uuid, quest, stage, completion, quest_id, dstart) VALUES ('".$avatar_key."','".$quest_name."','".$quest_stage."','".$qc."','".$quest_id."','".$date."') WHERE NOT EXISTS (SELECT * 
     FROM $db 
     WHERE uuid = '$avatar_key' AND quest_id = '$quest_id' 
     ) 

我試圖做的是檢查表有一排,既準確$ avatar_key和$ quest_id值,如果這樣的行不存在,那麼我希望它插入一個新的。

我收到一個錯誤,我似乎無法弄清楚如何修復;查詢本身在我看來(儘管我是一個SQL新手),這是/應該/工作。我正在使用SQL 5.5,&這是我收到的錯誤消息:

您的SQL語法錯誤;檢查 對應於你的MySQL服務器版本正確的語法使用 附近手冊「WHERE NOT EXISTS(SELECT * FROM sldb_quest WHERE UUID = '0089dcea-' 在行1

我知道有一個唯一的標識符會對此有所幫助,但是數據庫將存儲很多行,其中許多行具有相同的值,唯一的唯一值將是UUID,然後我必須與quest_id匹配以便找到我想要的特定行 uuids看起來像這樣:「0089dcea-bf39-40f5-859e-d79bdc383f1b」,並且是爲每個用戶唯一生成的

任何指針,我做錯了將非常感激!我確信這只是我錯過某處的一個小細節,但我找不到原因。

+0

可能的重複http://stackoverflow.com/questions/1218905/how-do-i-update-if-exists-insert-if-not-aka-upsert-or-merge-in-mysql – PinnyM

回答

1

A WHERE子句在INSERTVALUES列表中無效。您可以使用INSERT ... ON DUPLICATE UPDATE,但我不確定更新是否是您想要的。

如果uuid(帶或不帶quest_id)被設置爲唯一密鑰,最簡單的事情就是使用IGNORE

INSERT IGNORE INTO $db (uuid, quest, stage, completion, quest_id, dstart) 
VALUES ('".$avatar_key."','".$quest_name."','".$quest_stage."','".$qc."','".$quest_id."','".$date."') 

如果您還沒有唯一的密鑰,我強烈建議您製作一個。

+0

我猜我可以嘗試一下獨特的關鍵,儘管我不確定這將如何影響具有相同uuid但不同quest_id的不同條目?需要此信息的第三方腳本無法在本地執行查詢(由於處於與SQL不兼容的不同環境中),因此無法知道數據庫中需要查詢的行中的唯一鍵。我要做的方式是向PHP文件發送一個URL請求,該文件然後查詢並打印頁面上的值。然後我將第三方腳本中的頁面內容轉換爲列表。 – Martin

+0

只要你在唯一鍵中包含兩列(uuid和quest_id),你應該沒問題。 – PinnyM

+0

這解決了我的問題!謝謝=) – Martin

相關問題