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

mariadb always returning last row from stored procedure

我遇到的问题与此问题非常相似:

MySQL stored procedure only returns last row of data

让我先解释一下场景。 我正在使用 phplist 并创建了一个自定义属性作为“每个用户令牌”;它用于创建自定义退订链接。 有时我需要在知道用户电子邮件地址的情况下手动获取此类令牌。

所以,这里涉及的两个 table 是(注意:这里只有相关字段):

使用 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');

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

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_attribute table 它等于最后一行:

这是一个 standard/default phplist 安装,所以我可能在程序中做错了我不太明白是什么。

感谢您的帮助!

WHERE `email`=email

两列均取自 phplist_user_user table - 因此条件值始终为 TRUE,直到 phplist_user_user.email 为 NULL。

记住 - 如果查询的行源包含多个 table(包括相同 table 的副本的情况),则为每个列名称指定 table name/alias .