【问题标题】:Mysql function, return more than one rowMysql函数,返回多行
【发布时间】:2017-11-26 10:23:07
【问题描述】:

我已经构建了一个小的 mysq 函数,它应该检查我表中的用户是否仍然是 vaid,有一行 validfrom 和 validto,我的函数应该检查 validto 日期是否比现在更早。

CREATE DEFINER=`root`@`localhost` FUNCTION `is_valid_user`(username 
VARCHAR(10)) RETURNS tinyint(1)
BEGIN
DECLARE valid_from, valid_to datetime;
SELECT
Gültig_von, Gültig_bis
INTO valid_from , valid_to FROM
Benutzer
WHERE
Benutzername = username;

IF valid_from <= now() and valid_to > now() THEN
RETURN TRUE;
ELSE
RETURN FALSE;
END if;

END

如果我想继续执行此功能,我会收到错误消息:结果包含多行。

【问题讨论】:

    标签: mysql function mysql-workbench mysql-function


    【解决方案1】:

    根据您发布的错误消息,您的查询返回多行,因此只需在 where 子句后添加“LIMIT 1”,这样您每次只有一行(如果存在)。

    【讨论】:

    • 如果我添加“限制 1”,每一行的值都与第一行相同
    • 在任何时候,您都必须检查任何一个用户,因此您必须通过查询限制。否则使用表中唯一的列,这样您也不必通过限制。
    • 我认为最好的方法是使用表的主键作为函数的输入,只需更改 where 子句,如“WHERE id = INPUT_ID_NAME”
    猜你喜欢
    • 2015-09-30
    • 2012-06-06
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    • 2011-12-01
    • 2016-05-12
    相关资源
    最近更新 更多