微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

mariadb总是从存储过程返回最后一行

如何解决mariadb总是从存储过程返回最后一行

我正面临着与此问题非常相似的问题:

MySQL stored procedure only returns last row of data

首先让我解释一下情况。 我正在使用PHPlist,并且创建了一个自定义属性,用作“每个用户令牌”;它用于创建自定义的退订链接。 有时,我需要手动知道用户的电子邮件地址来获取此类令牌。

因此,这是两个涉及的表(注意:此处仅相关字段):

  • PHPlist_user_user :ID,电子邮件
  • 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');

Corect token

如果我将此查询放入存储过程中,则无论电子邮件是否正确,它总是返回最后一个令牌插入表中>

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

Wrong token returned

Wrong token whatever the input

PHPlist_user_user_attribute表中检查它是否等于最后一行:

last row of table

这是标准/认的PHPlist安装,因此我可能对我不太了解的程序有误。

谢谢您的帮助!

解决方法

WHERE `email`=email

这两列均来自phplist_user_user表-因此,条件值始终为TRUE,直到phplist_user_user.email为NULL。

请记住-如果查询的行源包含多个表(包括同一表的副本的情况),则为EACH列名指定表名/别名。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。