2016-03-11 52 views
1

我試圖得到一個得分與領帶的排名 - 但沒有跳過行列1. Thomas 2. Peter 2. Jaden 4. Maria的mysqli與領帶排名

我們的數據庫查詢的第一個版本很簡單:

"SELECT * FROM $Table WHERE Score > 0 ORDER BY Score LIMIT $Count OFFSET $Offset" 

然後我a1ex07版本工作:

"SELECT UID, Name, Score, Rank, (SELECT COUNT(*) FROM $Table t2 WHERE t2.Score < t1.Score AND Score > 0) +1 AS Rank FROM $Table t1 WHERE Score > 0 ORDER BY Rank LIMIT $Count OFFSET $Offset" 

但也有空間...

我最相關結果:

  1. MySQL Rank with ties 解決方案的工作,但跳過行列(1 - > 1 - > 3 - > 4 ...)
  2. MySQL Rank in the Case of Ties 解決方案的工作,但再次跳過行列
  3. Simple MySQL Update Rank with Ties 排名再次跳過...
  4. How do I Handle Ties When Ranking Results in MySQL? 不是很相關...

我希望有人能幫助我;

MySQL的(我)10.1.10-MariaDB的

+0

我記得我之前在這裏讀過關於同一問題的問題。它沒有與你相同的措辭,但我想你可以找到它的排名。與您的 –

回答

0

爲了實現居在MySQL可以使用會話變量:

SELECT tmp.UID, 
     tmp.Name, 
     @rnk := IF(@score = tmp.Score, @rnk, @rnk+1) AS Rank, 
     @score := tmp.Score as Score 
FROM (
      SELECT  * 
       FROM $Table, 
         (SELECT @rnk := 0, @score = NULL) AS init 
      ORDER BY Score DESC 
     ) AS tmp 

子查詢由得分數據進行排序並初始化變量。主要查詢將當前行的得分與前一個得分進行比較,確定排名

+0

相同的目標很容易解決,感謝您的幫助。它的工作原理 - 但它像其他代碼片段一樣跳過^^ – Rhutos

+0

那麼這意味着它跳過了行列?在我的測試中,它給出了結果1-> 2-> 2-> 3(http://sqlfiddle.com/#!9/a6591/1)這不是你要求的嗎?或者它在你的例子中給出了不同的結果?如果可以,請給出一些數據示例,以及您正在使用的mysql版本? – piotrgajow

+0

我在phpMyAdmin 使用您的命令MySQL版本:5.0.11-dev的 結果: http://upload.rising-games.net/upload/Public/Results.png 一定有什麼東西錯了我的服務器...... :( – Rhutos