我有posts
一个有post_order
列的表。我将每个帖子的顺序存储在其中。当我将一行的顺序从 25 更改为 15 时,我应该将所有行从 15 更新到结尾。这对几行有好处,但在数千行中是最差的。
有没有更好的排序帖子设计,更高效?
我有posts
一个有post_order
列的表。我将每个帖子的顺序存储在其中。当我将一行的顺序从 25 更改为 15 时,我应该将所有行从 15 更新到结尾。这对几行有好处,但在数千行中是最差的。
有没有更好的排序帖子设计,更高效?
为什么不改变相关的顺序,而不是从 15 开始?假设您有一张这样的表:
Post Post_Order
----------------------
x 1
y 2
z 3
. .
. .
t 10
如果您想将 t 更改为第一个帖子,您可以将 t 的 post_order 更改为 1,并将顺序为 1 (x) 的行设置为您首先选择的值 (10)。
你可以使用旧的 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
...而不是为每一行单独发布。