执行第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
执行第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
设你要将第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"
此算法的条件是页号必须连续。
我觉得您的算法效率太低,如果有一百页,我想将第一页换为第100页,那么整个表都被你更新得烂掉了(磨损太严重啦:))。to 各位:
我想和大家讨论的是一个通用的算法,而不是针对某一特定情况的,问题中我只是举了一个简单的例子来表达我的意思。
我觉得你对效率的理解有点问题:按你的题目的要求,第1页换为第100页,第1页与第100页中间的页号都是要往前移的,不更新你怎么实现前移?我想这不是算法的问题,而是你没把问题搞清楚。
另外数据库不是纸做的,根本不用担心磨损问题。
没有别的方法。原先,我曾想以list的方式存放page。但后来一想,更新太复杂了。
我利用了另外一个方法,和你的类似,只需要更改2n次。
另外,“磨损”只是一个玩笑的说法,你不会这么严肃吧?
我觉得自己表达得不够清楚:
因为页面顺序的调整情况事不确定的,比如说只是很简单的将第一页调整为第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...。
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是不是太多了些?