2010-10-04 98 views
0

只有兩列,我想只在menu_id存在時更新。否則,我想插入一個新的行。這裏是我的查詢:SQL REPLACE不能正常工作

REPLACE `dol_subs_menu_access` 
SET `menu_id` = '{$aVars['menu_item']}', 
`mlevels` = '{$sMemLevels}' 

這將創建一個新的行每次。有什麼我失蹤?

+1

'REPLACE'在SQL執行字符串替換爲子串中的字符串較長。聽起來你想'更新'該領域的實際內容到別的東西,這是正確的嗎?你還用什麼數據庫? – JNK 2010-10-04 17:47:56

+1

@JNK:參見[MySQL的REPLACE語句](http://dev.mysql.com/doc/refman/5.1/en/replace.html)。 – 2010-10-04 17:49:26

+0

MySQL對不起,是的,我猜更新是我正在尋找。但如果記錄不在那裏,我該如何插入一個新的?我想保留它到一個單一的查詢 – tmartin314 2010-10-04 17:51:25

回答

2

要麼是列在你的聲明中的主鍵?我的猜測是,他們都沒有,這是什麼REPLACE statement(不要與字符串替換功能相混淆)需要確定它是否更換VS插入...

2

你可能想看看​​。這將允許您插入記錄或更新記錄(如果它已存在)。您將需要在查詢中包含主鍵。

這裏是他們的文檔頁面查詢示例:

INSERT INTO table (a,b,c) VALUES (1,2,3) 
    ON DUPLICATE KEY UPDATE c=c+1; 

我認爲這將是這個樣子的查詢(測試它第一次雖然)

INSERT INTO `dol_subs_menu_access` (menu_id,mlevels) 
     VALUES ('{$aVars['menu_item']}','{$sMemLevels}') 
ON DUPLICATE KEY UPDATE mlevelsMemLevels='{$sMemLevels}'; 
+0

或'mlevelsMemLevels = VALUES(mlevelsMemLevels)',沒有必要把字符串中的兩倍。 – Wrikken 2010-10-04 18:07:09