【发布时间】:2017-02-24 01:00:12
【问题描述】:
我在 MySQL 存储过程上遇到了问题,已经用 IF THEN ELSE 做了另一个逻辑,但我仍然有一些我无法理解的问题......
该过程包含两个用户输入:user_id 和 meet_id。该过程定义了一个名为 'ue' 的变量,它存储了一系列验证的结果(如果用户存在,如果事件存在,如果事件日期仍然有效,等等。) .
之后,它会在 IF THEN ELSE 选择器中插入和更新多个表上的一些数据,并根据验证选择 1(或 0)作为结果。
但我的问题是:它总是将 0 作为“结果”返回给我,就好像我执行 INSERT 时我的验证变量为 0...如果我删除 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
提前致谢! 我已经被困了一段时间了,不知道为什么。
【问题讨论】:
标签: mysql sql stored-procedures