2016-03-11 32 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