我的posts
表格有post_order
列。我存储每个帖子的顺序。当我将行的顺序从25更改为15时,我应该将所有行从15更新为结尾。
它适用于少量行,但在数千行中它最差。
订购帖子有更好的设计,效率更高吗?
答案 0 :(得分:0)
为什么不改变相关的订单而不是从15开始一直下降?假设你有一张这样的表:
Post Post_Order
----------------------
x 1
y 2
z 3
. .
. .
t 10
如果您想将t更改为第一个帖子,可以将t的post_order更改为1并将第1(x)行的行设置为您首先选择的值(10)。
答案 1 :(得分:0)
您可以使用旧的BASIC技巧(从BASIC仍有行号开始),留下间隙。
例如(从Kuzgun's answer无耻地复制):
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
。