我的排名计算查询
SELECT @i := @i +1 AS rank, t . *
FROM groups t, (
SELECT @i :=0
)foo
WHERE (
t.group_id = '1'
)
ORDER BY t.views DESC
)r
WHERE r.id =4
以root身份登录phpmyadmin,它会正确计算所有内容。通过php使用php的mysql帐户,输出无法正确计算。它不计算排名,它获取所有行,找到我给它的ID的行号,然后它返回行号前面所有行的位置。
所以如果有5行,并且r.id = 4在表格的第4行,它会忽略t.views的顺序,只是告诉我id#4是表格中的第4行。 r.id = 1000表中的第1000位。它不会告诉我它的等级。当我以root身份运行查询时,它会正确地告诉我排名。
我假设有一些权限需要授予php mysql用户才能使用@的?这是我唯一合乎逻辑的解释,它似乎无视逻辑。有人知道许可是什么吗?
答案 0 :(得分:0)
创建每个新会话时,将丢弃用户变量。根据您在PHP代码中管理会话的方式,您可能会在一个会话中设置变量并尝试在另一个会话中使用这些值 - 它们将不会被设置。
例如,如果你有一个命令行mysql客户端,你会看到这种行为:
mysql> set @x = 5;
mysql> select @x;
+------+
| @x |
+------+
| 5 |
+------+
mysql> quit
%
% mysql -u user -p
mysql> select @x;
+------+
| @xxx |
+------+
| NULL |
+------+
因此,请确保在一个用户会话中设置并使用所有用户变量。