2

我的排名计算查询

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

在 phpmyadmin 中以 root 身份登录,它会正确计算所有内容。通过php使用php的mysql账号,输出计算不正确。它不计算排名,它获取所有行,找到我给它的 ID 的行号,然后它返回行号相对于它之前的所有行的位置。

因此,如果有 5 行,并且 r.id = 4 在表中的第 4 行,它会忽略 t.views 的顺序,只告诉我 id #4 是表中的第 4 行。r.id = 1000 是表中的第 1000 位。它不会告诉我它的等级。当我以 root 身份运行查询时,它会正确告诉我排名。

我假设需要为 php mysql 用户授予某种权限才能允许使用@'s?这是我对它的唯一合乎逻辑的解释,似乎它无视逻辑。有谁知道权限是什么?

4

1 回答 1

0

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

例如,如果您有一个命令行 mysql 客户端,您将看到以下行为:

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

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

于 2013-02-19T17:41:09.090 回答