执行第1行后结果是1,1,3,4,5
执行第2行后结果是1,1,2,4,5
执行第3行后结果是3,3,2,4,5
明白!!!!正确的写法是:
update tblName set pageIndex=0 where pageIndex=1;
update tblName set pageIndex=1 where pageIndex=2;
update tblName set pageIndex=2 where pageIndex=3;
update tblName set pageIndex=3 where pageIndex=0

解决方案 »

  1.   

    给你个通用算法。
    设你要将第i页换成第j页
    "update tblName set pageIndex=-1 where pageIndex=" & str(i);
    if i>j then
       "update tblName set pageIndex=pageIndex+1 
            where pageIndex<" & str(i) & " and pageIndex>=" & str(j);
    else
       "update tblName set pageIndex=pageIndex-1 
            where pageIndex<=" & str(j) & " and pageIndex>" & str(i); 
    end if
    "update tblName set pageIndex=" & str(i) & "where pageIndex=-1"
    此算法的条件是页号必须连续。
      

  2.   

    to a_lan:
        我觉得您的算法效率太低,如果有一百页,我想将第一页换为第100页,那么整个表都被你更新得烂掉了(磨损太严重啦:))。to 各位:
        我想和大家讨论的是一个通用的算法,而不是针对某一特定情况的,问题中我只是举了一个简单的例子来表达我的意思。
      

  3.   

    hsboy(hsboy):如果你只是想对两个页面做交换的话,是不必要用我的算法——那其实与交换变量是一个道理的。每一本编程的低级入门书都有介绍。
    我觉得你对效率的理解有点问题:按你的题目的要求,第1页换为第100页,第1页与第100页中间的页号都是要往前移的,不更新你怎么实现前移?我想这不是算法的问题,而是你没把问题搞清楚。
    另外数据库不是纸做的,根本不用担心磨损问题。
      

  4.   

    在你结构下,只能把需要更新的pageindex一个一个更新了。
    没有别的方法。原先,我曾想以list的方式存放page。但后来一想,更新太复杂了。
      

  5.   

    to yangzi(笨笨),你怎么回来了
      

  6.   

    a_lan:按照你的算法,每一个pageIndex都要更改很多次哦。因为按照你的方法,每一次的调整顺序都是利用了-1,这样一来,在下一次调整之前,第一次的必须按照你上面的过程做完,即更新了abs(i-j)次,一百次调整做完,那要更新多少次?
    我利用了另外一个方法,和你的类似,只需要更改2n次。
    另外,“磨损”只是一个玩笑的说法,你不会这么严肃吧?
      

  7.   

    一点补充:
    我觉得自己表达得不够清楚:
    因为页面顺序的调整情况事不确定的,比如说只是很简单的将第一页调整为第100页,那么只需要
    set pageindex=-1 where pageindex=1;
    set pageindex=pageindex-1 where pageindex>1 and pageindex <=100;
    set pageindex=100 where pageindex=-1
    就可以了。
    但问题是这只是一个特例。我需要的是一个通用的算法,不管你怎么调整,比如:
    1 to 5,
    2 to 93,
    23 to 8,
    .......
    这个算法照样能够应付自如。其实这个问题我已经解决,但还是希望能和高手讨论。利用我的方法,只需要更新2n次pageIndex,动态生成的sql 语句也很少,而且不需要使用if、while之类的语句,only update...where...。
      

  8.   

    hsboy(hsboy):我很怀疑你是不是真看懂了我上面的几行简单的程序。你不会把程序里的i,j看成是循环变量吧?另外我给出的并不是一个完整的解决方案,只不过是一个数据库更新单元,其中i,j是可变的。如果你想做的很讲究的话,在更新数据库之前你还有很多事情要做的。按你的例子:
    1 to 5,
    2 to 93,
    23 to 8,
    如果做完这3个调整,你所说的2n是多少?2*3次?还是2*5+2*93+2*23?6次不现实吧?而
    2*5+2*93+2*23是不是太多了些?