2016-07-25 92 views
0

我在每個用戶的排名有一個問題是完美的,問題是當用戶「A」具有相同的結果,用戶「B」MySQL的 - 勝排名不打領帶

我的代碼

SELECT ID, Wins, 
    (SELECT COUNT(*)+1 FROM users WHERE Wins>x.Wins) AS rank_upper, 
    (SELECT COUNT(*) FROM users WHERE Wins>=x.Wins) AS rank_lower 
FROM `users` x WHERE x.username='$_GET[user]' 

ID wins Rank 
1 23 1 
2 17 2 
3 17 2 
4 10 3 
5 10 3 

我喜歡這樣的:

ID wins Rank 
1 23 1 
2 17 2 
3 17 3 
4 10 4 
5 10 5 
+0

什麼讓你說'ID 2'是'Rank 2',而ID 3'是'Rank 3'時他們的勝率是一樣的? – Eduard

+0

只是一個例子,我想讓用戶有相同點的結果是不同的排名 –

+0

sql注射見[link](http://www.acunetix.com/blog/articles/preventing-and-fixing-sql -injection-vulnerabilities-in-php-applications /) – Drew

回答

0

也比較ID可能會爲你工作

SELECT ID, Wins, 
    (SELECT COUNT(*)+1 FROM users WHERE Wins>x.Wins or (Wins=x.Wins and id<x.id)) AS Rank 
FROM `users` x WHERE x.username='$_GET[user]' 
+0

它不起作用。 ($ row = mysql_fetch_array($ result)){ printf($ row [「Rank」]);使用此代碼打電話給結果<?php 。 \t } ?> –

+1

對不起,如果我工作,這是我的錯誤。謝謝 –

+0

@DanielHernandez - 不要使用'mysql_fetch_arry()' - PHP中整個'mysql_xxx()'API已經過時。改爲使用'mysqli_xxx()'或PDO庫。另外,永遠不要將'$ _GET'變量直接放入查詢字符串中。至少,你必須使用適當的轉義技巧,但更好地使用準備好的語句。請參閱http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php/瞭解更多信息 – Simba