基于用户排名的SQL关系排序

时间:2013-10-09 17:00:39

标签: sql algorithm sorting

我正在使用Oracle 11g。排名不是静态的。它们会根据用户对项目的排名进行更改。

我想使用Rank(1-10)列和对象的ID来保持排名1-10的实时记录。这样用户就可以不断评价对象的集合,并且排名保持正确。我发现下面有一个不错的解决方法,但存在差距问题:

// REMOVAL
UPDATE ... SET orderingID=NULL WHERE orderingID=removedID
UPDATE ... SET orderingID=orderingID-1 WHERE orderingID > removedID
// INSERTION
UPDATE ... SET orderingID=orderingID+1 WHERE orderingID > insertionID
UPDATE ... SET orderID=insertionID WHERE ID=addedID

如果我有这样一张桌子:

RANK | OBJECT

1    | AA

6    | BB

使用上面的算法,我遇到了数字缺口的问题。例如,如果我插入2我得到:

RANK | OBJECT

1    | AA

2    | DD

7    | BB

当它应该保持在6时,6变为7。有没有办法在SQL中使用更新语句或存储过程来执行此操作?

0 个答案:

没有答案