从mysql表中排列刺客游戏中的玩家

时间:2015-04-03 01:26:00

标签: php mysql

我正在试图弄清楚如何计算我正在运行的assassins游戏的排名,我希望主要按杀戮对人进行排名,然后按杀戮时间排序(那些在杀戮之前杀人的人)其他人排名更高)然后最后被暗杀的人已经排名低于那些活着的人。

我的伐木暗杀表如下:

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结果,就像我希望它排名一样,但我不知道如何。我试图获得最常见的刺客价值:(。我正在使用PHP与MySQL,因此PHP解决方案也可以。(请注意,忽略“确认”字段,但“ver”必须同时为它是一个有效的杀人。)

非常感谢任何帮助。 :)

1 个答案:

答案 0 :(得分:0)

使用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