maria DB服务器版本10和mysqli驱动程序上相同查询的不同结果

maria DB服务器版本10和mysqli驱动程序上相同查询的不同结果,mysql,mariadb,Mysql,Mariadb,我正在努力解决一个奇怪的问题:两座宫殿上的数据相同,但我的服务器上有mariadb服务器版本10.*而我的开发服务器上有mysql版本5* 以下是无法正常工作的查询 SELECT t.sponsor_id, @user_id FROM ( SELECT user_id, sponsor_id FROM profiles ORDER BY user_id DESC ) AS t , (select @user_id := 101 ) initialize W

我正在努力解决一个奇怪的问题:两座宫殿上的数据相同,但我的服务器上有mariadb服务器版本10.*而我的开发服务器上有mysql版本5*

以下是无法正常工作的查询

SELECT
    t.sponsor_id,
    @user_id
FROM
(
    SELECT user_id, sponsor_id
    FROM profiles
    ORDER BY user_id DESC
) AS t ,
(select @user_id := 101 ) initialize
WHERE FIND_IN_SET(t.user_id, @user_id) > 0 AND
      @user_id := concat(@user_id, ',', t.sponsor_id) 
同一查询产生不同的结果集

这是开发服务器的输出

生产服务器的输出为

   sponsor_id  | @user_id
   -----------------------
   101         |  101, 100

请帮我解决这个问题

您需要修改逻辑,以避免在同一查询中设置和读取
@user\u id
。和都明确警告此类查询是非确定性的

MySQL:

一般来说,除了SET语句之外,您不应该 为用户变量赋值并读取同一变量中的值 陈述对于其他语句,例如SELECT,您可能会得到 你期望的结果,但这不是保证

马里亚布:

读取用户定义的变量并在中设置其值是不安全的 相同的语句(除非设置了命令),因为 操作未定义


注意:如果你想说“但它以前一直对我有效”,请再读一遍。它可能会起作用,但不能保证

消除所有@变量。专注于
组\u CONCAT()

在不知道数据、模式或所需输出是什么的情况下,我只能猜测这样的事情可能会起作用:

SELECT  sponsor_id
        GROUP_CONCAT(user_id ORDER BY user_id) AS users
    FROM profiles
    ORDER BY sponsor_id;

只是一个建议,但是会话变量的初始化是否与此有关?实际上,我不知道我对任何修改持开放态度的原因是什么,这正是您的MySql版本5。我问这个问题是因为不久前我遇到了一个类似的问题,我问过数据库管理员,读一下,它们是不同的版本吗?让我们看一下这两个页面上的解释选择…。