你为什么不联合id 和ORDER 一起操作呢?

解决方案 »

  1.   

    "记录前一项和后一项的id"      ----------肯定是需要记录的"你为什么不联合id 和ORDER 一起操作呢?" ---------一般来说肯定是这样做的,没id怎么确定记录呢?不知道你具体指的是什么。""前移","后移"的实现难度不大,难的是,第四页的一条记录要前移到第一页,那有的你写的了"     -----暂不考虑分页感谢大家以上的回复,可是对先前的算法仍然没有什么改进啊!
      

  2.   

    我这几天自己对原算法进行了一点改进。
    原表结构不变,添加时对order自动的值做一点规范,使其为基数为2,差为2的等差数列,也就是order的值理论上是2,4,6,8,10,...。  达到这个效果也很简单,就是每次添加一条记录的时候,都先把已经存在记录的最大order取出来(比如存储为maxorder),新增的记录的order则为maxorder+2.处理"前移","后移"操作没什么变化,就是记录id,然后将两个id的order值互换。处理“插入”操作则有很大变化,例如下表数据(按order排列):
    ¦--id-- ¦-----choice----- ¦---order--- ¦ 
    ------------------------------------------------------- 
    ¦  1    ¦     aaaaaa      ¦      2      ¦ 
    ¦  6    ¦     gggggg      ¦      4      ¦ 
    ¦  2    ¦     bbbbbb      ¦      6      ¦ 
    ¦  3    ¦     pppppp      ¦      8      ¦ 
    ¦  9    ¦     dddddd      ¦      10     ¦ 
    ¦  5    ¦     cccccc      ¦      12     ¦ 如果要将id=6的数据插入到id=9的前面,则按照下面的步骤操作:
    1.id=9的order取出:rel_order=10
    2.new_order = rel_order-1(将id=9的order减1)
    3.将id=6的order更新为new_order。此时全部order的值变为“2,6,8,9,10,12”
    4.按序洗牌:取出全部数据并按照新order排序,循环重设order的值,将其重新改为基数为2,差为2的等差数列
    这样顺序就改过来了,当然有个条件,就是总排序数据量一定不能过大,控制在100以内,不然数据操作量过大,不适合采用本方法,我也有一些想法,下次更新。