从mysql表中对刺客游戏中的玩家进行排名


Ranking players in assassins game from mysql table

我想知道如何计算我正在运行的刺客游戏的排名,我希望首先按击杀次数对人进行排名,然后按击杀时间对人进行排序(那些在其他人之前被击杀的人排名更高),最后是那些已经被暗杀的人,排名低于活着的人。

我的暗杀记录表是这样的:

mysql> describe assassinations;
+-----------+-----------------------------------------+------+-----+---------+----------------+
| Field     | Type                                    | Null | Key | Default | Extra          |
+-----------+-----------------------------------------+------+-----+---------+----------------+
| id        | int(11)                                 | NO   | PRI | NULL    | auto_increment |
| assassin  | int(11)                                 | NO   |     | NULL    |                |
| target    | int(11)                                 | NO   |     | NULL    |                |
| timestamp | int(11)                                 | NO   |     | NULL    |                |
| ver       | enum('assassin','target','both','none') | NO   |     | none    |                |
| confirmed | bit(1)                                  | NO   |     | b'0'    |                |
+-----------+-----------------------------------------+------+-----+---------+----------------+

我在想,必须有一种方法来排序mysql结果,就像我希望它排名的方式一样,但我不知道如何排序。我甚至试图获得最常见的assassin值:(。我将PHP与MySQL一起使用,因此PHP解决方案也可以工作。(请注意,忽略"confirmed"字段,但"ver"必须同时存在才能成为有效的kill)。

如有任何帮助,我们将不胜感激

使用COUNTMIN来获取击杀次数和第一次击杀的时间。还有一个EXISTS子查询,用来判断刺客是否已经被杀。然后,您可以在ORDER BY子句中使用所有这些值来对玩家进行排名。

SELECT a1.assassin, COUNT(*) AS kills, MIN(timestamp) AS killtime,
        EXISTS (SELECT * FROM assassinations AS a2
                WHERE a2.target = a1.assassin) AS killed
FROM assassins AS a1
WHERE ver = 'both'
GROUP BY assassin
ORDER BY kills DESC, killtime ASC, killed ASC