0

私は基本的に「ポイント」でソートされたユーザーのランキング順位を保存する「ランキング」と呼ばれるテーブルを持っています。これは:

*Id - 整数 - AI (位置です。1 = 最初のポイント。最高点)
*IdUser - 整数
*PointsNow - 整数
*PointsBefore - 整数
*PositionBefore - 整数

私が達成しようとしているのは、ユーザーが最高ランクの位置に達したか、それとも現在は下がっているかを知るための何らかの方法を持つことです.

たとえば、これらはいくつかのエントリです。

1 | 2236 | 41 | 0 | 0

2 | 551 | 40 | 0 | 0

3 | 1557年 | 34 | 0 | 0

だから私はこれを行うことでこれを達成できると思いました:

*すべてのエントリを削除します

*自動インクリメントを1にリセット

*PointsNow を PointsBefore に、Id を PositionBefore にコピーします。

このようにするべきなのか、それとももっと論理的なオプションがあるのか​​ わかりません。助けていただければ幸いです。

ありがとう

4

1 に答える 1

1

これを試して:

select @rownum:=@rownum+1 `rank`, u.idUser 
from User u, (SELECT @rownum:=0) r 
order by PointsNow desc;

ランキングに基づいてユーザーを並べ替えたいだけの場合:

SELECT * FROM User
ORDER BY PointsNow DESC;

サンプルデータ:

CREATE TABLE User(
IdUser Integer primary key,
PointsNow Integer,
PointsBefore Integer,
PositionBefore  Integer);

INSERT INTO User(IdUser,PointsNow,PointsBefore,PositionBefore)
VALUES (2236,41,0,0),(551,40,0,0),(1557,34,0,0);

SQL フィドルのデモ

注意すべき重要な点は、id 列を省略したことです。トリガーを使用してクエリを自動化します。ランキング計算の詳細については、を参照してください。ランキング ポジションを格納するための MySQL update ステートメント

于 2013-01-28T13:41:13.890 に答える