使用php的MYSQL不会对数据进行排名,而root mysql用户则会对数据进行排名

时间:2013-02-19 14:12:52

标签: php mysql phpmyadmin

我的排名计算查询

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用户才能使用@的?这是我唯一合乎逻辑的解释,它似乎无视逻辑。有人知道许可是什么吗?

1 个答案:

答案 0 :(得分:0)

创建每个新会话时,将丢弃用户变量。根据您在PHP代码中管理会话的方式,您可能会在一个会话中设置变量并尝试在另一个会话中使用这些值 - 它们将不会被设置。

例如,如果你有一个命令行mysql客户端,你会看到这种行为:

mysql> set @x = 5;
mysql> select @x;
+------+
| @x   |
+------+
|    5 |
+------+
mysql> quit
%
% mysql -u user -p
mysql> select @x;
+------+
| @xxx |
+------+
| NULL |
+------+

因此,请确保在一个用户会话中设置并使用所有用户变量。