2015-04-03 93 views
0

我想弄清楚如何計算我正在運行的assassins遊戲的排名,我希望主要通過殺死人物排名,然後按殺死時間排序(那些誰在其他人排名更高之前被殺死),然後最後被暗殺的人已經排在那些活着的人之下。從mysql表中排列玩家在刺客遊戲

我的日誌暗殺表看起來像這樣:

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解決方案也可以工作。(請注意,忽略「確認」字段,但「版本」必須爲它是一個有效的殺死)。

任何幫助將非常感激。:)

回答

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