我正在试图弄清楚如何计算我正在运行的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”必须同时为它是一个有效的杀人。)
非常感谢任何帮助。 :)
答案 0 :(得分:0)
使用COUNT
和MIN
获取杀戮次数和第一次杀戮的时间。还有一个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