支持sql拖放排序

xesrikrc  于 2021-06-21  发布在  Mysql
关注(0)|答案(0)|浏览(186)

我有一个页面有很多项,可以通过拖放来重新排序,修改这个项上的一个列,名为 order (整数)。为了在这一页上订购,我做了如下事情 ORDER BYorderASC .
过程是这样的(在拖放过程中):
确定 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列更有效?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题