我创建了mysql函数来检查记录是否存在然后返回true,否则返回true但是给定的函数总是返回true。不确定我们为什么以及在哪里有错误。任何人都建议。
CREATE DEFINER = `hugosys`@`localhost` FUNCTION `GetUserFeedLike` (
`userFeedID` INT,
`userID` INT
) RETURNS BOOLEAN NOT DETERMINISTIC READS SQL DATA SQL SECURITY DEFINER BEGIN DECLARE flag BOOL DEFAULT FALSE ;
SELECT EXISTS (
SELECT *
FROM userFeedLikes
WHERE userFeedID = userFeedID
AND userID = userID
)
INTO flag;
RETURN flag;
END
答案 0 :(得分:2)
参数和列之间存在混淆。 始终为参数提供独特的名称:
CREATE FUNCTION GetUserFeedLike (
in_userFeedID INT,
in_userID` INT
) RETURNS BOOLEAN
BEGIN
DECLARE v_flag BOOL; DEFAULT FALSE ;
SELECT EXISTS (SELECT *
FROM userFeedLikes
WHERE userFeedID = in_userFeedID AND userID = in_userID
)
INTO v_flag;
RETURN v_flag;
END;
当你写:
WHERE userFeedID = userFeedID AND userID = userID
您只是将列与自身进行比较。
答案 1 :(得分:1)
您将列与自身进行比较,因此它返回true。
将变量名称更改为与p_
前缀相同的名称,以表示参数。
CREATE DEFINER = `hugosys`@`localhost` FUNCTION `GetUserFeedLike` (
`p_userFeedID` INT,
`p_userID` INT
) RETURNS BOOLEAN NOT DETERMINISTIC READS SQL DATA SQL SECURITY DEFINER BEGIN DECLARE flag BOOL DEFAULT FALSE ;
SELECT EXISTS (
SELECT *
FROM userFeedLikes
WHERE userFeedID = `p_userFeedID`
AND userID = `p_userID`
)
INTO flag;
RETURN flag;
END