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 でルートとしてログインすると、すべてが適切に計算されます。php 経由で php の mysql アカウントを使用すると、出力が正しく計算されません。ランクを計算せず、すべての行をフェッチし、指定した ID の行番号を見つけてから、その前のすべての行に関して行番号の位置を返します。

したがって、5 行あり、r.id = 4 がテーブルの 4 行目にある場合、t.views による順序は無視され、id #4 がテーブルの 4 番目の行であることがわかります。r.id = 1000 は表の 1000 番目です。ランクは教えてくれません。ルートとしてクエリを実行すると、ランクが正しく表示されます。

@の使用を許可するには、php mysqlユーザーに付与する必要があるある種の許可があると思いますか? それが私の唯一の論理的な説明です。論理を無視しているようです。誰が許可が何であるか知っていますか?

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 |
+------+

そのため、1 つのユーザー セッションですべてのユーザー変数を設定して使用するようにしてください。

于 2013-02-19T17:41:09.090 に答える