现在数据库有两列(Id,Rank),一般情况下数据是这样的
Id   Rank
1     1
2     2
3     4
4     3 
5     5
Rank是一个排名,正常情况是不会重复。
现在的问题是Rank重复了,也会有缺失,如:
Id   Rank
1     1
2     1
3     3
4     3 
5     5
6     6
7     8
8     8
9     8
10    9
有什么办法可以让重复的排名改为缺失的排名,改成下面这样:
Id   Rank
1     1
2     2
3     3
4     4 
5     5
6     6
7     8
8     7
9     10
10    9
求高手们解决!!!数据库

解决方案 »

  1.   

    SELECT * FROM test1 ORDER BY IF(id=rank,1,0) desc
      

  2.   

    SELECT * FROM test1 ORDER BY ( id=rank ) DESC,id asc
      

  3.   

    用程序解决比较容易。select * from xx order by Rank然后遍历记录,可以得到当前重复的记录和缺失的记录,然后进行修改。
      

  4.   


    排序规则是相对排序不变填充缺失的排名,如下面的表id为2的排名比id为3和4的排名高
    Id   Rank
    1     1
    2     1
    3     3
    4     3 
    处理后就变成
    Id   Rank
    1     1
    2     2
    3     3
    4     4