我有一个页面有很多项,可以通过拖放来重新排序,修改这个项上的一个列,名为 order
(整数)。为了在这一页上订购,我做了如下事情 ORDER BY
orderASC
.
过程是这样的(在拖放过程中):
确定 order
来自目标项的值(位于);
更新 order
源项的值与目标项相同;
增加 order
目标项的值乘以1;
查询表中的另一项是否具有相同的 order
超过目标项目;
如果为真,则增加 order
一个接一个;
重复步骤5,直到不存在具有相同 order
价值观;
在流程结束时,源项将位于目标项的顶部。
该进程的问题是,它运行2次更新+n次(1次查询和1次更新),这取决于初始更新后顺序的冲突程度。因此,在一个包含1.000.000个订单从1到1.000.000的项目的表中,例如,如果我将一个订单为1到5的项目移动,它将运行近200万个查询。
我目前的解决办法是使用 order
浮动的或双重的。然后,当我在表中插入一个值时,我设置 order
与…相同 id
项目的。
然后过程是这样的:
确定 order
目标项的值(下降到)--例如503;
查询第一个具有 order
立即低于 order
目标项目——例如,502;
更新 order
源项的值与两个值的平均值之比——例如,502,5;
它可以很好地工作,但是由于数据量很大,它在某个时刻会发生冲突,并且很难识别或修复这种冲突。
我的问题是:有没有一种更可靠、更快速的方法可以处理表上的项目排序,这种方法比float列更有效?
暂无答案!
目前还没有任何答案,快来回答吧!