/ /特定のレジストリの位置を見つける-ランキング/ aspクラシック/ mysql-mysql

特定のレジストリの位置を見つける - ランキング/ asp classic / mysql - mysql

データベースにいくつかのテーブルがあります 記録。どの位置にあるかを特定する方法を知る必要があります 最近記録が出て、ランキングシステムを作って スコアに応じた位置。

例、データベースに次のレコードがあります

user-01 / 100 points
user-02 / 88 points
user-03 / 55 points
user-04 / 11 points
user-05 / 30 points

これで、user-03がどこにあるのか知りたいのですが、これが3番目です。システムがこの配置を表示するにはどうすればよいですか?

ありがとう!

回答:

回答№1は1

結果セットに行番号列を作成できます。変数を初期化するには、 JOIN 変数を0に設定するだけの疑似テーブルに変換します。 SET 事前に-追加のステートメントが必要です。

デモを行うには:

mysql> CREATE TABLE scores (user VARCHAR(10), score INT);
Query OK, 0 rows affected (0.08 sec)

mysql> INSERT INTO scores
-> VALUES ("user1", 10),
-> ("user2", 20),
-> ("user3", 30);
Query OK, 3 rows affected (0.02 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> SELECT user, score, @rownum := @rownum + 1 AS rank
-> FROM scores
-> JOIN (SELECT @rownum := 0) rownum
-> ORDER BY score DESC;
+-------+-------+------+
| user  | score | rank |
+-------+-------+------+
| user3 |    30 |    1 |
| user2 |    20 |    2 |
| user1 |    10 |    3 |
+-------+-------+------+
3 rows in set (0.00 sec)

回答№2の場合は0

同様の問題が発生しましたが、この「user-03」のような行が複数回繰り返されていました。また、2つのテーブルを使用していました。

テーブルの構造:

スコアテーブル[スコアfloat、uid int、timestamp datetime] ユーザーテーブル[usernamevarchar(500)、id int、etc ...]

ランク付けの基準は、最大スコアに基づいてユーザーをリストすることでした。だから私はを使用してクエリを変更しました グループ別 そして ジョイン 以下に示すSQLクエリで。

ランキングシステム。

SELECT *, @rownum:=@rownum+1 as rank
FROM (
select  MAX(s.score) as score,u.username as username
from scorelog s join userdb u on s.uid=u.id
group by s.uid
order by MAX(s.score) desc
) user_rank, (SELECT @rownum:=0) r

個々の行の位置とデータベースでのランクを特定するには、以下のクエリを使用します。 ザ・

SELECT *
FROM ( SELECT *, @rownum:=@rownum+1 as rank
FROM (
select  MAX(s.score) as score,
u.username as username,
s.uid as uid,s.
timestamp as timestamp
from scorelog s join userdb u on s.uid=u.id
group by s.uid order by MAX(s.score) desc
) user_rank, (SELECT @rownum:=0) r
)t where username = "johndoe"

同様の解決策を提供するstackoverflowからの以下のリソースも参照してください。

1対多のテーブルでのユーザーのランキングのクエリ

SQLランキングソリューション

PHPMYSQLクエリ結果「RANKING」