2011-08-10 82 views
0

我試圖創建檢查表,看是否存在記錄,如果沒有,它把記錄添加到SQL語句。如果它確實存在,它改變字段的值爲TRUE。的MySQL如果(SELECT COUNT(*)返回一個#1064錯誤

If (SELECT COUNT(*) FROM 'my_preferences' JOIN users ON 'user_id' = 'mp_user_id') =1 
    UPDATE `mp_start_page`= TRUE where 'user_id' = 'mp_user_id' 

Else   
    INSERT INTO `my_preferences` (`mp_user_id`, `mp_start_page`) VALUES ('user_id', 'TRUE') 

我也看着試圖與INSERT實現這個...對重複密鑰更新功能,但我似乎無法得到這兩種工作。

感謝您幫助

編輯補充:我比較兩個單獨的表(my_preferences &用戶)。我需要檢查my_preferences表,看是否在mp_user_id領域存在users.user_id,如果是的話,它更新mp_state_page爲TRUE,如果沒有,它增加了製作筆錄mp_user_id = USER_ID和mp_start_page爲TRUE

+1

我假設在您的查詢中使用單引號而不是back ticks只是一個錯字,對嗎? –

+0

這種事情不是有效的MySQL查詢。唯一可以擁有這種邏輯的地方是存儲過程,函數或觸發器。查詢以SELECT,UPDATE,INSERT等開始。您可以使用INSERT INTO ... SELECT進行條件插入,或使用INSERT ... ON DUPLICATE KEY UPDATE執行條件UPDATE,但是沒有單個查詢邏輯。 –

+0

好了,現在我想這樣的: INSERT INTO my_preferences(mp_user_id,mp_start_page)VALUES((SELECT'user_id'的使用者), 'TRUE')對重複密鑰更新mp_start_page = 'TRUE' 返回此錯誤: #1242 - 子查詢返回多於一行 – EMUELLER

回答

1
INSERT INTO my_preferences (mp_user_id, mp_start_page) VALUES ('user_id', 'TRUE') ON DUPLICATE KEY UPDATE mp_start_page = 'TRUE'; 

應該管用。也許mp_start_page是一個布爾字段,在這種情況下不要引用它。正如下面提到的@galador,確保mp_user_id被設置爲某種鍵,無論是主鍵還是外鍵。否則ON DUPLICATE KEY確實沒有意義。

+0

這似乎沒有對users表做任何事情來將users.user_id與my_preferences.mp_user_id字段進行比較。 – EMUELLER

+0

你需要先做'JOIN'嗎?如果'mp_user_id'是一個引用'users.user_id'的外鍵,它應該沒有關係。 –

+0

您的代碼不會拋出了任何錯誤,這是很好的,但它只是增加了1個紀錄0的mp_user_id我知道應該有添加了大量更多的記錄並且在用戶表中沒有的0 USER_ID。 – EMUELLER

0

語法錯誤

UPDATE `mp_start_page`= TRUE where 'user_id' = 'mp_user_id' <-- wrong syntax 
UPDATE TABLE_NAME SET `mp_start_page`= TRUE where 'user_id' = 'mp_user_id'; 

但是MySQL不接受

if {condition} 
then {update} 
else insert 

所以

insert ignore ... <-- if the user_id is primary key 

其他嚴重的問題

UPDATE `mp_start_page`= TRUE <--- this is 1 
VALUES ('user_id', 'TRUE') <--- this is string "TRUE" 

兩者都沒有做同樣的事情

0

I've also looked into trying to achieve this with the INSERT ... ON DUPLICATE KEY UPDATE function, but i can't seem to get that to work either.

INSERT INTO my_preferences (mp_user_id, mp_start_page) VALUES ('user_id', TRUE) 
ON DUPLICATE KEY UPDATE mp_start_page=VALUES(mp_start_page) 

應該工作,如果你有mp_user_id一個獨特的密鑰集。