0

我有posts一个有post_order列的表。我将每个帖子的顺序存储在其中。当我将一行的顺序从 25 更改为 15 时,我应该将所有行从 15 更新到结尾。这对几行有好处,但在数千行中是最差的。

有没有更好的排序帖子设计,更高效?

4

2 回答 2

0

为什么不改变相关的顺序,而不是从 15 开始?假设您有一张这样的表:

Post  Post_Order
----------------------
x       1
y       2
z       3
.       .
.       .
t       10

如果您想将 t 更改为第一个帖子,您可以将 t 的 post_order 更改为 1,并将顺序为 1 (x) 的行设置为您首先选择的值 (10)。

于 2013-07-12T09:12:41.837 回答
0

你可以使用旧的 BASIC 技巧(从 BASIC 仍然有行号的时候起),留下gaps

例如(从Kuzgun 的回答中无耻地复制):

x       10
y       20
z       30
.       .
.       .
t       100

然后移动t到第二名将只更新一行:

x       10
t       15
y       20
z       30
.       .
.       .

当然,您仍然需要不时移动超过一排(当它们“聚集”太多时),但这应该相对较少(如果这成为问题,您可以使初始间隙变大)。


或者,继续做你正在做的事情。

除非真的很频繁地重新排序数千个项目,否则现代硬件上的现代 DBMS 应该不会有太大的麻烦 - 只需小心从一个命令中完成,例如......

UPDATE POST
SET POST_ORDER = POST_ORDER + 1
WHERE POST_ORDER > 1 -- AND other criteria

UPDATE...而不是为每一行单独发布。

于 2013-07-12T22:10:24.340 回答