mariadb 总是从存储过程返回最后一行
mariadb always returning last row from stored procedure
我遇到的问题与此问题非常相似:
MySQL stored procedure only returns last row of data
让我先解释一下场景。
我正在使用 phplist 并创建了一个自定义属性作为“每个用户令牌”;它用于创建自定义退订链接。
有时我需要在知道用户电子邮件地址的情况下手动获取此类令牌。
所以,这里涉及的两个 table 是(注意:这里只有相关字段):
- phplist_user_user: id,email
- phplist_user_user_attribute: 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');
如果我将此查询插入 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 .
我遇到的问题与此问题非常相似:
MySQL stored procedure only returns last row of data
让我先解释一下场景。 我正在使用 phplist 并创建了一个自定义属性作为“每个用户令牌”;它用于创建自定义退订链接。 有时我需要在知道用户电子邮件地址的情况下手动获取此类令牌。
所以,这里涉及的两个 table 是(注意:这里只有相关字段):
- phplist_user_user: id,email
- phplist_user_user_attribute: 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');
如果我将此查询插入 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 .