3行のテーブルがあります。プレーヤー、時間、サーバー。
今、私は2つのことを望んでおり、その方法がわかりません。
サーバーには3つの価値があります。 1、2、3。サーバーとプレーヤーは共に主キーです。 UserはVARCHAR、ServerおよびTimeは文字列です。わかりやすくするために、1、2、3を使用しています。
1つ目は、時間順にテーブルを並べ替えて特定のプレーヤーの位置を取得したいのですが、1つのサーバーからのみです。
例:
User Time Server
2 10 1
1 50 1
2 60 3
1 20 2
1 100 3
2 70 2
ここで、ユーザー2の位置を取得したいとします。
次に、ユーザーの時間の合計で並べ替えると、ユーザーの位置を取得できます。この場合、ユーザー1は1(合計時間:170)、ユーザー2は2(合計時間:100)になります。
あなたが私を助けてくれることを願っています!ところで、私はこれをJava;)で使用したい
〜Java4ever/Robin
時間でソートした場合のユーザー2の位置とサーバー= 1
SET @given_user = 2;
SET @given_server = 1;
SET @pos = 0;
SELECT * FROM
(
SELECT (@pos:=@pos+1) pos,User
FROM playerstats
WHERE server = @given_server
ORDER BY time DESC
) A
WHERE User = @given_user;
ユーザーの合計時間で並べ替えると
SET @pos = 0;
SELECT (@pos:=@pos+1) pos,User,TotalUserTime FROM
(
SELECT User,SUM(time) TotalUserTime
FROM playerstats
GROUP BY User
) A ORDER BY TotalUserTime DESC;
mysql> DROP DATABASE IF EXISTS mydb;
Query OK, 0 rows affected, 1 warning (0.03 sec)
mysql> CREATE DATABASE mydb;
Query OK, 1 row affected (0.01 sec)
mysql> USE mydb
Database changed
mysql> CREATE TABLE playerstats
-> (
-> User INT,
-> Time INT,
-> Server INT
-> ) ENGINE=MyISAM;
Query OK, 0 rows affected (0.25 sec)
mysql> INSERT INTO playerstats VALUES
-> (2, 10,1),
-> (1, 50,1),
-> (2, 60,3),
-> (1, 20,2),
-> (1,100,3),
-> (2, 70,2);
Query OK, 6 rows affected (0.03 sec)
Records: 6 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM playerstats;
+------+------+--------+
| User | Time | Server |
+------+------+--------+
| 2 | 10 | 1 |
| 1 | 50 | 1 |
| 2 | 60 | 3 |
| 1 | 20 | 2 |
| 1 | 100 | 3 |
| 2 | 70 | 2 |
+------+------+--------+
6 rows in set (0.01 sec)
mysql>
mysql> SET @given_user = 2;
Query OK, 0 rows affected (0.00 sec)
mysql> SET @given_server = 1;
Query OK, 0 rows affected (0.00 sec)
mysql> SET @pos = 0;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT * FROM
-> (
-> SELECT (@pos:=@pos+1) pos,User
-> FROM playerstats
-> WHERE server = @given_server
-> ORDER BY time DESC
-> ) A
-> WHERE User = @given_user;
+------+------+
| pos | User |
+------+------+
| 2 | 2 |
+------+------+
1 row in set (0.09 sec)
mysql>
mysql> SET @pos = 0;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT (@pos:=@pos+1) pos,User,TotalUserTime FROM
-> (
-> SELECT User,SUM(time) TotalUserTime
-> FROM playerstats
-> GROUP BY User
-> ) A ORDER BY TotalUserTime DESC;
+------+------+---------------+
| pos | User | TotalUserTime |
+------+------+---------------+
| 1 | 1 | 170 |
| 2 | 2 | 140 |
+------+------+---------------+
2 rows in set (0.00 sec)
mysql>
SET @given_user = 2;
SET @pos = 0;
SELECT * FROM
(
SELECT (@pos:=@pos+1) pos,User,TotalUserTime FROM
(
SELECT User,SUM(time) TotalUserTime
FROM playerstats
GROUP BY User
) A ORDER BY TotalUserTime DESC
) AA
WHERE User = @given_user;
mysql> SET @given_user = 2;
Query OK, 0 rows affected (0.00 sec)
mysql> SET @pos = 0;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT * FROM
-> (
-> SELECT (@pos:=@pos+1) pos,User,TotalUserTime FROM
-> (
-> SELECT User,SUM(time) TotalUserTime
-> FROM playerstats
-> GROUP BY User
-> ) A ORDER BY TotalUserTime DESC
-> ) AA
-> WHERE User = @given_user;
+------+------+---------------+
| pos | User | TotalUserTime |
+------+------+---------------+
| 2 | 2 | 140 |
+------+------+---------------+
1 row in set (0.06 sec)
mysql>