我面临一个与这个问题非常相似的问题:
让我先解释一下场景。我正在使用 phplist 并且我创建了一个自定义属性作为“每个用户令牌”;它用于创建自定义取消订阅链接。有时我需要在知道用户电子邮件地址的情况下手动获取此类令牌。
所以,这里是两个涉及的表(注意:这里只有相关字段):
- phplist_user_user : id,email
- phplist_user_user_attribute : 属性ID、用户ID、值
使用 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 安装,所以我可能在我不太明白的过程中做错了什么。
感谢您的任何帮助!