1

我正在使用 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 中使用更新语句或存储过程来做到这一点?

4

0 回答 0