2016-02-21 45 views
0

我有一個數據庫和兩個命令來顯示同樣的事情SQL計數和秩序

SELECT name, score 
FROM sm_easyrank 
ORDER BY score DESC, name ASC 
LIMIT 0, 10 

這將選擇按分數排序的球員,而如果兩個球員有相同的分數,他們將通過名稱順序。

SELECT count(*) 
FROM sm_easyrank 
WHERE score >= (SELECT (score) 
       FROM sm_easyrank 
       WHERE steamid = '%s' 
       ) 

這會計算出我之前有多少玩家。

問題是:我有一個位置的第一個順序,另一個在第二個(如果我有與其他人相同的分數)。我想要以同名得分排名第二名球員。

sm_easyrank是表名

得分是得分列(數列)
steamid是一個唯一的ID
名與人
對不起我的英文名稱的列!

+1

請編輯您的問題,並提供樣本數據和預期的結果。目前還不清楚你想要返回什麼。那就是'steamid',那和'name'有什麼關係? –

+0

我編輯過,我不知道現在是否好,我是最新的 –

+0

那麼你想找到所有得分高於你的人的名字和分數嗎? – JCollerton

回答

0

如果我理解正確的話,你可以做你想做什麼用一個JOIN和條件,其中包括雙方比分和名稱:

SELECT count(*) 
FROM sm_easyrank s JOIN 
    sm_easyrank s2 
    ON s2.steamid = '%s' AND 
     (s.score > s2.score OR 
     s.score = s2.score AND s.name <= s2.name 
     ); 
+0

這個作品,非常感謝。下次我會更加明確。我是新來的,我不知道這裏的事情是如何運作的 –