Mysql mariadb总是从存储过程返回最后一行

Mysql mariadb总是从存储过程返回最后一行,mysql,stored-procedures,mariadb,phplist,Mysql,Stored Procedures,Mariadb,Phplist,我面临的问题与这个问题非常相似: 让我先解释一下情况。 我使用的是phplist,我创建了一个自定义属性,充当“每个用户令牌”;它用于创建自定义的取消订阅链接。 有时我需要知道用户的电子邮件地址手动获取此类令牌 因此,以下是两个涉及的表(注意:此处仅限relevand字段): phplist\u user\u user:id,电子邮件 phplist\u user\u user\u属性:attributeid、userid、value 通过dbeaver ide,执行以下查询,我可以正确获

我面临的问题与这个问题非常相似:

让我先解释一下情况。 我使用的是phplist,我创建了一个自定义属性,充当“每个用户令牌”;它用于创建自定义的取消订阅链接。 有时我需要知道用户的电子邮件地址手动获取此类令牌

因此,以下是两个涉及的表(注意:此处仅限relevand字段):

  • phplist\u user\u user:id,电子邮件
  • phplist\u user\u user\u属性:attributeid、userid、value
通过dbeaver ide,执行以下查询,我可以正确获取用户令牌:

SELECT value AS token FROM phplist_user_user_attribute WHERE attributeid=3 and userid=(SELECT MAX(`id`) FROM phplist_user_user WHERE `email`='useremail@domain.ext');

如果我将此查询放在存储过程中,它总是返回插入到表中的最后一个标记,而不管电子邮件是否正确:

CREATE DEFINER=`root`@`%` PROCEDURE `phplist`.`GetTokenFromEmail`(IN `email` VARCHAR(255))
BEGIN
    
    SELECT value AS token 
    FROM phplist_user_user_attribute 
    WHERE attributeid=3 
      and userid=(SELECT MAX(`id`)  
                  FROM phplist_user_user 
                  WHERE `email`=email);

END

在phplist_user_user_属性表中检查它是否等于最后一行:

这是一个标准/默认的phplist安装,所以我可能在这个过程中犯了一些错误,我真的不明白是什么

谢谢你的帮助

WHERE `email`=email
这两列都取自
phplist\u user\u user
表-因此在
phplist\u user\u user.email
为空之前,条件值始终为真


请记住-如果查询的rowsource包含多个表(包括同一表的副本),请为每个列名指定表名/别名。

。。。我来自sql server世界,我习惯于将参数命名为与字段相同的名称,没有任何问题。。。我没有注意到。我重命名了参数,它正在工作,谢谢@Squiffy重命名的参数是安慰剂。在复合语句中,始终使用规则-列名始终伴随表别名,如果没有表别名,则这是局部变量。