2017-02-24 59 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) –