问题描述
我正面临着与此问题非常相似的问题:
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`='[email protected]');
如果我将此查询放入存储过程中,则无论电子邮件是否正确,它总是返回最后一个令牌插入表中>
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列名指定表名/别名。