2017-02-24 29 views
0

後,我對MySQL的存儲過程中的問題,已經做了與IF THEN ELSE另一個邏輯,但我仍然有我無法理解的問題...MySQL存儲過程SELECT VAR值錯誤INSERT

該過程包括上兩個用戶輸入:user_idmeet_id。該過程定義一個名爲'ue'的變量,該變量存儲一系列驗證的結果(如果用戶存在,則存在,如果存在事件,如果事件日期仍然有效,則爲)。

之後,它在IF THEN ELSE選擇器中的多個表上執行INSERT和UPDATE一些數據,並根據驗證選擇1(或0)AS結果。

但我的問題是:它總是返回我0作爲'結果',就好像我的驗證變量是0當我做INSERT ...並且有什麼地方變得很奇怪,如果我刪除INSERT [... ]。代碼行,它會正確返回驗證值(1或0)。

程序的代碼是這一個:提前

CREATE DEFINER=`nwouserf`@`localhost` 
PROCEDURE `join_event`(IN `user_id` BIGINT(64), IN `event_id` INT) 
NOT DETERMINISTIC MODIFIES SQL DATA SQL SECURITY DEFINER 

begin 
DECLARE ue INT; 
SET ue = EXISTS(SELECT 1 FROM users WHERE fb_uid=user_id) 
     AND EXISTS(SELECT 1 FROM meetup WHERE meet_id=event_id) 
     AND EXISTS(SELECT 1 FROM meetup WHERE date > NOW() AND meet_id = event_id) 
     AND EXISTS(SELECT 1 FROM meetup WHERE meet_id = event_id AND participants <= max_participants) 
     AND NOT EXISTS(SELECT 1 FROM meetup_participation WHERE fb_uid = user_id AND meet_id = event_id); 

IF ue = 1 THEN 

    INSERT INTO meetup_participation (fb_uid, meet_id) VALUES (user_id, event_id); 
    UPDATE users SET events_participated = events_participated + 1 WHERE fb_uid=user_id; 
    UPDATE meetup SET participants = participants + 1 WHERE meet_id=event_id; 
    SELECT 1 AS result; 

ELSEIF ue = 0 THEN 
    SELECT 0 AS result; 
ELSE 
    SELECT null AS result; 
END IF; 
end 

謝謝! 我一直堅持這一段時間,並不能找出原因。

回答

1

您應該定義OUT參數。添加

「,OUT結果INT」

緊接在最後一個IN參數之後。

+0

仍然不是正確的解決方案,我認爲,因爲它沒有OUT參數和插入參數工作...但我做了一個解決你的答案,因爲我做了我創建的其他程序...必須改變SELECT SET,並做一個雙重查詢。它唯一的問題在於PHP,在我看來,多重查詢並不是一個好主意,因爲我必須調用CALL過程並選擇輸出變量,它可能會在查詢時失敗並繼續下一個查詢。 –

+0

爲什麼你不把它作爲一個函數呢?從我聽到的你看來,這看起來好多了。 – Valentin

+0

我是MySQL的新手,我可能是錯的,但是從我迄今爲止讀過的內容來看,在修改表上的數據時不應該使用函數(INSERT,UPDATE不允許)。 [鏈接](http://stackoverflow.com/a/1179778/2612722) –