【发布时间】:2020-08-13 11:26:03
【问题描述】:
我遇到了一个与这个问题非常相似的问题:
MySQL stored procedure only returns last row of data
让我先解释一下场景。 我正在使用 phplist 并且我创建了一个自定义属性作为“每个用户令牌”;它用于创建自定义取消订阅链接。 有时我需要在知道用户电子邮件地址的情况下手动获取此类令牌。
所以,这里涉及的两个表是(注意:这里只有相关字段):
- 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');
如果我将此查询放在存储过程中,它总是返回最后一个标记插入到表中,而不管电子邮件的正确性:
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 安装,所以我可能对我不太明白的程序做错了什么。
感谢您的帮助!
【问题讨论】:
标签: mysql stored-procedures mariadb phplist