我正在与奇怪的情况作斗争,两个宫殿上的数据是相同的,但我的服务器是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请帮我解决这个问题
发布于 2017-06-10 21:40:34
您需要修改逻辑,以避免在同一查询中设置和读取@user_id。MySQL manual和MariaDB documentation都明确警告此类查询是不确定的。
MySQL:
作为一般规则,除了在SET语句中,您永远不应该将值赋给用户变量并在同一语句中读取值。<...>对于其他语句,例如SELECT,您可能会得到预期的结果,但这不能得到保证。
MariaDB:
读取用户定义的变量并在同一语句中设置它的值是不安全的(除非设置了命令),因为这些操作的顺序是未定义的。
注意:如果你想说“但它以前一直对我有效”,请再读一遍。It 可能会工作,但不能保证。
发布于 2017-06-27 19:55:01
删除所有@变量。关注GROUP_CONCAT()。
在不知道数据、模式或所需输出是什么的情况下,我只能猜测这样的事情可能会起作用:
SELECT sponsor_id
GROUP_CONCAT(user_id ORDER BY user_id) AS users
FROM profiles
ORDER BY sponsor_id;https://stackoverflow.com/questions/44473341
复制相似问题