首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >maria DB服务器版本10和mysqli驱动程序上相同查询的不同结果

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

Stack Overflow用户
提问于 2017-06-10 20:32:26
回答 2查看 270关注 0票数 0

我正在与奇怪的情况作斗争,两个宫殿上的数据是相同的,但我的服务器是mariadb服务器版本10。*而我的开发服务器是mysql版本5。

以下是不能正常工作的查询

代码语言:javascript
复制
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) 

相同查询产生不同的结果集

以下是开发服务器的输出

​

生产服务器的输出为

代码语言:javascript
复制
   sponsor_id  | @user_id
   -----------------------
   101         |  101, 100

请帮我解决这个问题

EN

回答 2

Stack Overflow用户

发布于 2017-06-10 21:40:34

您需要修改逻辑,以避免在同一查询中设置和读取@user_id。MySQL manual和MariaDB documentation都明确警告此类查询是不确定的。

MySQL:

作为一般规则,除了在SET语句中,您永远不应该将值赋给用户变量并在同一语句中读取值。<...>对于其他语句,例如SELECT,您可能会得到预期的结果,但这不能得到保证。

MariaDB:

读取用户定义的变量并在同一语句中设置它的值是不安全的(除非设置了命令),因为这些操作的顺序是未定义的。

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

票数 1
EN

Stack Overflow用户

发布于 2017-06-27 19:55:01

删除所有@变量。关注GROUP_CONCAT()。

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

代码语言:javascript
复制
SELECT  sponsor_id
        GROUP_CONCAT(user_id ORDER BY user_id) AS users
    FROM profiles
    ORDER BY sponsor_id;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44473341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档