2017-01-11 27 views
0

我要尋找的SQL語句返回用戶按分數排名,但爲了這樣做,這是不符合下面的代碼發生的事情:用於按照正確順序獲取用戶級別的SQL語句?

$sql = "SELECT COUNT(*) AS rank FROM users WHERE points>=(SELECT points FROM users WHERE uid='$uid')"; 

相反,每個用戶取決於有多少具有相同的等級有用戶。因此,如果有25個用戶,他們的每個等級都將顯示爲25,但事實並非如此,因爲每個用戶必須有個人等級。

我已經嘗試了幾種不同的解決方案,但我不能將邏輯放在一起。我以爲這會工作:

$sql ="SELECT COUNT(*)-1 AS rank FROM users WHERE points>=(SELECT points FROM users WHERE uid='$uid' ORDER BY DESC)"; 

但我沒有成功。

TLDR;如何更改我的SQL語句以反映用戶按分數排序,而不是多個用戶具有相同的排名?

+0

我不知道這是否應該被標記爲PHP或SQL,我很抱歉,如果我錯了! – Dylan

+0

'選擇用戶,排名排名desc'? 'COUNT(*)'只返回結果中的行數,與點或用戶無關。 – drew010

+4

請顯示樣本數據和預期輸出。 –

回答

0

如果您嘗試使用點訂購在表中的數據,並給他們單獨排名,你可以使用ROW_NUMBER()

SELECT *,ROW_NUMBER() OVER (ORDER BY points DESC) AS RANK FROM users 

ROW_NUMBER()不可用MYSQL。你可以做以下的MYSQL

SELECT 
@r:[email protected]+1 Rank,tbl.* 
FROM users tbl, (select @r:=0) as r 
ORDER BY users.points DESC; 

考慮您的數據

Points 
3 
7 
8 

使用SELECT語句ROW_NUMBER(),你會得到如下結果

結果:

Points Rank 
8  1 
7  2 
3  3 
相關問題