如何解决mariadb总是从存储过程返回最后一行
我正面临着与此问题非常相似的问题:
MySQL stored procedure only returns last row of data
首先让我解释一下情况。 我正在使用PHPlist,并且创建了一个自定义属性,用作“每个用户令牌”;它用于创建自定义的退订链接。 有时,我需要手动知道用户的电子邮件地址来获取此类令牌。
因此,这是两个涉及的表(注意:此处仅相关字段):
使用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_attribute表中检查它是否等于最后一行:
这是标准/默认的PHPlist安装,因此我可能对我不太了解的程序有误。
谢谢您的帮助!
解决方法
WHERE `email`=email
这两列均来自phplist_user_user
表-因此,条件值始终为TRUE,直到phplist_user_user.email
为NULL。
请记住-如果查询的行源包含多个表(包括同一表的副本的情况),则为EACH列名指定表名/别名。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。