登陆论坛 找回密码 立刻获得20pp! 地图 帮助
宽带山生活
版主:

  • 主题内容
<< [1] 2 >>  [只看楼主]  [加入关注] 点击:1097 回复:62 已被0人关注

主题:我的关于分页的类

Sunrise
1402 0

来自:上海
注册:2000-09-29
发帖:98+4437 
http://www.ccopus.com/code/ccDbPager.html



没时间写太多帮助,如果你想用,但不会用的话,和我联系吧。

挺简单的,应该能看懂:)




-------------------------------------------------------------------------------------------
Never lose my way...

发表于:2003-06-03 02:13:13
推荐:牙齿有问题,您找我! ...楼主...

Kidd.Cheng
1049 0

来自:保密
注册:2002-08-01
发帖:109+1672 
为什么不用ADO本身的分页属性呢?

难道你的比它的要快?




-------------------------------------------------------------------------------------------
htto://shman.3322.org/shman/bbs

发表于:2003-06-03 09:14:21

158

来自:北京
注册:2002-07-11
发帖:71+279 
太棒了!!downloadingdownloading



-------------------------------------------------------------------------------------------
不好意思呦~~我是个菜鸟=^______^=


妖兽工厂


http://asp.7i24.com/ericbj/

发表于:2003-06-03 10:07:34
推荐:迎新年牙齿美容大行动 ...第2楼...

阳光小虾
284 0

来自:广西
注册:2002-10-12
发帖:95+1220 
老大出手就是不一样! downloading



-------------------------------------------------------------------------------------------
一只奋斗着的虾 拼搏着的虾

发表于:2003-06-03 10:15:40
推荐:kds红日官网启动啦!!! ...第3楼...

Sunrise
1402 0

来自:上海
注册:2000-09-29
发帖:98+4437 
不比它快那就不叫优化了!downloading



-------------------------------------------------------------------------------------------
Never lose my way...

发表于:2003-06-03 10:35:02

Kidd.Cheng
1049 0

来自:保密
注册:2002-08-01
发帖:109+1672 
o?

那要试试看了




-------------------------------------------------------------------------------------------
htto://shman.3322.org/shman/bbs

发表于:2003-06-03 10:35:27
推荐:KDS红日球迷会2010招募公告 ...第5楼...

158

来自:北京
注册:2002-07-11
发帖:71+279 
downloading



-------------------------------------------------------------------------------------------
不好意思呦~~我是个菜鸟=^______^=


妖兽工厂


http://asp.7i24.com/ericbj/

发表于:2003-06-03 10:59:32

329 0

来自:上海
注册:2003-01-06
发帖:146+2195 
已阅



嘿嘿



-------------------------------------------------------------------------------------------
这个家伙很懒,什么也没留下......

发表于:2003-06-03 12:58:57

李苗苗
370 0

来自:江西
注册:2001-12-03
发帖:238+3063 
没有比较过,不知道是否和ado自带得分页功能相比要快很多



老大给得代码还没有完全整明白,不过看了下中华纺织网测试,好象也不是特别得快啊,我点击“末叶”到页面显示共花了23.7秒。可能ado得分页会更吓人




-------------------------------------------------------------------------------------------
李苗苗是我 *_=’

发表于:2003-06-03 16:22:06
推荐:迎新年牙齿美容大行动 ...第8楼...

128 0

来自:安徽
注册:2002-06-19
发帖:12+53 
俺也瞧一下!




-------------------------------------------------------------------------------------------
鲲鹏展翅九万里

发表于:2003-06-03 18:20:08

Sunrise
1402 0

来自:上海
注册:2000-09-29
发帖:98+4437 
你们可以比较一下,以下两个页面的速度,这两个页面是放在一台服务器上的,一个用了我这段代码,一个没有用。



纺织网中文版供求信息页(约55000条记录,用了我的分页代码)

http://www.texindex.com.cn/leads/leads.asp



纺织网英文版供求信息页(约33000条记录,没有用我的分页代码)

http://www.texindex.com/Leads/Search.asp




-------------------------------------------------------------------------------------------
Never lose my way...

发表于:2003-06-03 21:58:20

329 0

来自:上海
注册:2003-01-06
发帖:146+2195 
老大我分析了你的sql语句,好象没有我前些日子贴的那个优化。





你的语句中有3个select,两个in,当执行in时会把每一条记录和数据库的记录进行比较,速度会慢,用得最多最慢,再加上条件就更慢了。





我贴的那个sql,只有2个select,一个in,我原来做过的分页,没有这么慢的。改改试试。



实在不行,放存存储过程,会很快的。存储过程也可以写通用的,可以传参的。



还有就是我原来的类是在得到客户端的记录集,得到后就马上断掉connection了

我试过这样取得记录集速度最快





以上我自己的一点意见。不一定对。供大家参考。嘿



-------------------------------------------------------------------------------------------
这个家伙很懒,什么也没留下......

发表于:2003-06-04 08:53:28

209

来自:湖南
注册:2001-05-26
发帖:10+64 
什么时候我能达到这样的水准啊!

碍。。。真是望尘莫及!




-------------------------------------------------------------------------------------------
I LOVE THIS GAME!

发表于:2003-06-04 09:24:16

Sunrise
1402 0

来自:上海
注册:2000-09-29
发帖:98+4437 
谢谢eway兄,确实只要两个SELECT就可以了。



至于慢嘛,是因为数据实在太庞大了,我取的视图已经过滤掉一部分了,实际表中有约120000条记录。



我也想过写存储过程,但实在是太麻烦了,SELECT语句的每个部分几乎都要动态,每次都要组合查询语句,实在受不了。



取得记录集以后马上断掉connection我没有做在类里,但是定义了类的释放方法。所以,只要取完以后set nothing一下就可以了。这样做是为了考虑到可以多次使用这个类,而避免在一个页面内重复多次连接操作。




-------------------------------------------------------------------------------------------
Never lose my way...

发表于:2003-06-04 09:55:55

Sunrise
1402 0

来自:上海
注册:2000-09-29
发帖:98+4437 
eway兄,刚刚看了一下你的那段代码,

sql = "select distinct top " & CInt(end_id) & " * from " & table & " where " & key & " not in (select top " & CInt(start_id) & " " & key & " from " & table & " where " & condition & " " & order & " ) and " & condition & " " & order



当条件为空的时候看上去会出错哦

我正好在处理这个问题,本想参考一下你是怎么解决的,呵呵~`




-------------------------------------------------------------------------------------------
Never lose my way...

发表于:2003-06-04 10:27:47

luy
1336 0

来自:上海
注册:2001-10-29
发帖:186+10759 
加精华吧!!downloading



-------------------------------------------------------------------------------------------
hi,Crazydata ver1.0 is here:


www.luydata.com

发表于:2003-06-04 11:27:42
推荐:爱尔给我的“重生” ...第15楼...

Sunrise
1402 0

来自:上海
注册:2000-09-29
发帖:98+4437 
好了,我改了一下,现在效率更高了,谢谢eway兄~downloading



-------------------------------------------------------------------------------------------
Never lose my way...

发表于:2003-06-04 15:36:13

阳光小虾
284 0

来自:广西
注册:2002-10-12
发帖:95+1220 
希望老大们讨论好最优方法后,再整理一下,加精华。

不然看起来乱乱的,也不知道如何取舍。。。




-------------------------------------------------------------------------------------------
一只奋斗着的虾 拼搏着的虾

发表于:2003-06-04 15:39:55

329 0

来自:上海
注册:2003-01-06
发帖:146+2195 
看我原来发的类里有啊,我得到条件的时候判断了,如果是空我就给它赋值为1=1



-------------------------------------------------------------------------------------------
这个家伙很懒,什么也没留下......

发表于:2003-06-04 16:17:46

329 0

来自:上海
注册:2003-01-06
发帖:146+2195 
所以不会报错埃条件为空

语句就是



where 1=1



-------------------------------------------------------------------------------------------
这个家伙很懒,什么也没留下......

发表于:2003-06-04 16:18:39

Sunrise
1402 0

来自:上海
注册:2000-09-29
发帖:98+4437 
eway兄,恕我冒昧,你上次帖的这段翻页的代码,你有没有实际应用过?还是仅仅从理论上写出来,没有实际用过?

里面有一个非常大的bug,而且,用你这段代码似乎没有办法达到预期的效果?




-------------------------------------------------------------------------------------------
Never lose my way...

发表于:2003-06-04 16:57:35
推荐:S*H*E你是卖艺还是卖色! ...第20楼...

421 0

来自:上海
注册:2001-12-01
发帖:106+1552 
老大,哪个页面怎么显示"修改中阿"




-------------------------------------------------------------------------------------------
我迷醉着月光般的妩媚

发表于:2003-06-04 16:57:56
推荐:科帕奇SUV俱乐部版主招募 ...第21楼...

Sunrise
1402 0

来自:上海
注册:2000-09-29
发帖:98+4437 
问题就在你只用两句SELECT来完成分页!

我们来分析一下




-------------------------------------------------------------------------------------------
Never lose my way...

发表于:2003-06-04 16:58:21
推荐:【车型PK】大众朗逸VS荣威550 ...第22楼...

Sunrise
1402 0

来自:上海
注册:2000-09-29
发帖:98+4437 
假设有以下数据表(表名:t_Company):

ID----CompanyName-----Status

1------公司一------1

2------公司二------0

3------公司三------1

4------公司四------1

5------公司五------0

6------公司六------0

7------公司七------0

8------公司八------1

9------公司九------1




-------------------------------------------------------------------------------------------
Never lose my way...

发表于:2003-06-04 17:01:27

Sunrise
1402 0

来自:上海
注册:2000-09-29
发帖:98+4437 
首先约定每页显示两条记录

我们看一下各页的执行情况:

第一页:

SELECT TOP 2 * FROM t_Company WHERE ID NOT IN (SELECT TOP 0 ID FROM t_Company)

SQL取出了ID号为1,2的两条记录,第一页没有问题。



第二页:

SELECT TOP 4 * FROM t_Company WHERE ID NOT IN (SELECT TOP 2 ID FROM t_Company)

出现问题,SQL取出了4条记录,ID为3,4,5,6的记录,来分析一下原因:

先看括号里的那句SELECT TOP 2 ID FROM t_Company 这个时候,SQL取出的应该是1,2

现在,查询语句变成 SELECT TOP 4 FROM t_Company WHERE ID NOT IN (1,2)

错误就在这里,SQL会取出ID不等于1和2的4条记录,而ID不等于1和2的记录有7条,所以,SQL执行了TOP 4,取出了ID是3,4,5,6的记录。



虽然在以后循环的时候,可以限制输出的记录出来弥补,但是,违背了我们的初衷,因为,随着页数的增加,取出的记录数页在增加。




-------------------------------------------------------------------------------------------
Never lose my way...

发表于:2003-06-04 17:57:24

329 0

来自:上海
注册:2003-01-06
发帖:146+2195 
NO



我的代码当然实践了,好多项目的。



我的第二句执行后的sql是这样的



select top 2 from t_company where id not in(select top 2 id from t_company)



仔细想想,嘿嘿



-------------------------------------------------------------------------------------------
这个家伙很懒,什么也没留下......

发表于:2003-06-04 18:18:38

Sunrise
1402 0

来自:上海
注册:2000-09-29
发帖:98+4437 
那样就对了!




-------------------------------------------------------------------------------------------
Never lose my way...

发表于:2003-06-04 18:20:02
推荐:本能寺之变 ...第26楼...

Sunrise
1402 0

来自:上海
注册:2000-09-29
发帖:98+4437 
嘿嘿~,NO PROBLEM!




-------------------------------------------------------------------------------------------
Never lose my way...

发表于:2003-06-04 18:23:07

329 0

来自:上海
注册:2003-01-06
发帖:146+2195 
第一个select top后面的值是每页显示的记录数,这个不变



-------------------------------------------------------------------------------------------
这个家伙很懒,什么也没留下......

发表于:2003-06-04 18:26:47

329 0

来自:上海
注册:2003-01-06
发帖:146+2195 
start_id = (CInt(pageno) - 1) * CInt(pagesize) '起始指针

end_id = CInt(pagesize) '终止指针





sql = "select distinct top " & CInt(end_id) & " * from " & table & " where " & key & " not in (select top " & CInt(start_id) & " " & key & " from " & table & " where " & condition & " " & order & " ) and " & condition & " " & order

Set get_rs = obj.get_rs(sql)

Set obj = Nothing





end_id就是pagesize,我以前的注视不对 ,sql的这个用地少所以忘了改了



-------------------------------------------------------------------------------------------
这个家伙很懒,什么也没留下......

发表于:2003-06-04 18:30:45

329 0

来自:上海
注册:2003-01-06
发帖:146+2195 
distinct 可以不要



-------------------------------------------------------------------------------------------
这个家伙很懒,什么也没留下......

发表于:2003-06-04 18:31:19

329 0

来自:上海
注册:2003-01-06
发帖:146+2195 
downloadingdownloadingdownloading



-------------------------------------------------------------------------------------------
这个家伙很懒,什么也没留下......

发表于:2003-06-04 18:32:16

Sunrise
1402 0

来自:上海
注册:2000-09-29
发帖:98+4437 
最终的版本,呵呵~,谢谢E兄



http://www.ccopus.com/code/ccDbPager.html




-------------------------------------------------------------------------------------------
Never lose my way...

发表于:2003-06-04 18:40:45

329 0

来自:上海
注册:2003-01-06
发帖:146+2195 
downloading



-------------------------------------------------------------------------------------------
这个家伙很懒,什么也没留下......

发表于:2003-06-04 18:49:40

阳光小虾
284 0

来自:广西
注册:2002-10-12
发帖:95+1220 
好夸张!居然快那么多!!! downloadingdownloadingdownloading



-------------------------------------------------------------------------------------------
一只奋斗着的虾 拼搏着的虾

发表于:2003-06-04 20:03:55

Sunrise
1402 0

来自:上海
注册:2000-09-29
发帖:98+4437 
eway兄,比较一下两句话的执行效率,到底是哪句快!呵呵~,可把我搞惨了!

SELECT TOP 8 * FROM [v_Product]

WHERE Country<>'中国' AND Status>0 AND Kind IN (2,6,8)

AND [ID] NOT IN

(SELECT TOP 8 [ID] FROM [v_Product]

WHERE Country<>'中国' AND Status>0 AND Kind IN (2,6,8)

ORDER BY UpdateTime DESC)

ORDER BY UpdateTime DESC



SELECT * FROM v_product

where ID IN

(SELECT TOP 16 [ID] FROM [v_Product] WHERE Country<>'中国' AND Status>0 AND Kind IN (2,6,8) ORDER BY UpdateTime DESC )

AND

ID NOT IN

(SELECT TOP 8 [ID] FROM [v_Product] WHERE Country<>'中国' AND Status>0 AND Kind IN (2,6,8) ORDER BY UpdateTime DESC )





呵呵~`,经过多次论证,似乎还是下面一句话要快一些,而且,上面一句话很多时候竟然会超时!




-------------------------------------------------------------------------------------------
Never lose my way...

发表于:2003-06-05 14:53:16
推荐:大家对于幼教有什么看法? ...第35楼...

421 0

来自:上海
注册:2001-12-01
发帖:106+1552 
我的ASP为什么在执行类似

SELECT TOP 2 * FROM t_Company WHERE ID NOT IN (SELECT TOP 0 ID FROM t_Company)

时报错?

Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)

[Microsoft][ODBC Microsoft Access Driver] 语法错误。 在查询表达式 'zt.bh not in(select top 0 bh from zt order by time1 desc,bh)' 中。

/9thbbs/list.asp, 第 61 行



而同样的语句直接贴到SQL查旬分析器中去执行就可以,把子查询中的top 0改为top n(n<>0)就可以在asp中执行




-------------------------------------------------------------------------------------------
我迷醉着月光般的妩媚

发表于:2003-06-05 15:41:05

421 0

来自:上海
注册:2001-12-01
发帖:106+1552 
在asp中执行

select top 10 * from table_name

执行正确



select top 0 * from table_name

报错

SELECT 子句中包含一个保留字、拼写错误或丢失的参数,或标点符号不正确。




-------------------------------------------------------------------------------------------
我迷醉着月光般的妩媚

发表于:2003-06-05 15:50:02
推荐:端午节人气美食学习包粽子! ...第37楼...

Sunrise
1402 0

来自:上海
注册:2000-09-29
发帖:98+4437 
没有在ACCESS里试过,我不想去兼容ACCESS,太麻烦了!




-------------------------------------------------------------------------------------------
Never lose my way...

发表于:2003-06-05 16:44:53
推荐:打造KDS最美贴,刹那芳华 ...第38楼...

329 0

来自:上海
注册:2003-01-06
发帖:146+2195 
我去测试一下。



-------------------------------------------------------------------------------------------
这个家伙很懒,什么也没留下......

发表于:2003-06-05 17:06:09

329 0

来自:上海
注册:2003-01-06
发帖:146+2195 
公布测试结果



-------------------------------------------------------------------------------------------
这个家伙很懒,什么也没留下......

发表于:2003-06-05 17:30:09

李苗苗
370 0

来自:江西
注册:2001-12-03
发帖:238+3063 
downloading



-------------------------------------------------------------------------------------------
李苗苗是我 *_=’

发表于:2003-06-05 17:32:41

329 0

来自:上海
注册:2003-01-06
发帖:146+2195 
表结果



id a b c四个字段,表名为abc,id为自动编号



用存储过程插入13万多数据,开始测试



执行

select top 1000 * from abc where 1=1 and id not in (select top 10000 id from abc where 1=1 order by id desc) order by id desc



用时:3秒整,测试五次以上。



执行

SELECT * FROM abc where ID IN (SELECT TOP 11000 id FROM abc where 1=1 order by id desc) AND ID NOT IN (SELECT TOP 10000 id FROM abc where 1=1 order by id desc)



用时:1秒整,测试五次以上。





看来一条语句不在于select有多少个,尽可能的使一条语句中的条件越少就越快。

我想是这样吧,还是楼主的好明一些,学习。。。。



-------------------------------------------------------------------------------------------
这个家伙很懒,什么也没留下......

发表于:2003-06-05 17:33:44

阳光小虾
284 0

来自:广西
注册:2002-10-12
发帖:95+1220 
这么说,斑竹原来写的那个分页方法,比后来改动的要快了?




-------------------------------------------------------------------------------------------
一只奋斗着的虾 拼搏着的虾

发表于:2003-06-05 17:38:42
推荐:被戴绿帽,心情极度差 ...第43楼...

329 0

来自:上海
注册:2003-01-06
发帖:146+2195 
看测试结果应该是啊



-------------------------------------------------------------------------------------------
这个家伙很懒,什么也没留下......

发表于:2003-06-05 17:48:26

Sunrise
1402 0

来自:上海
注册:2000-09-29
发帖:98+4437 
但是为什么呢?不解~




-------------------------------------------------------------------------------------------
Never lose my way...

发表于:2003-06-05 18:20:30

421 0

来自:上海
注册:2001-12-01
发帖:106+1552 
会不会是与编译方式有关啊,谁懂编译原理阿downloading



-------------------------------------------------------------------------------------------
我迷醉着月光般的妩媚

发表于:2003-06-06 09:41:39

Sunrise
1402 0

来自:上海
注册:2000-09-29
发帖:98+4437 
编译?你搞错没有!不要胡乱说话!




-------------------------------------------------------------------------------------------
Never lose my way...

发表于:2003-06-06 09:52:15

421 0

来自:上海
注册:2001-12-01
发帖:106+1552 
对不起,应该说是解释引擎才对

系统对语句经过语法分析,解释为可以执行的语句。

因为真正可以执行的语句数量肯定比SQL语句少,所以,如何进行解释,以何种方式解释,解释成什么样的执行语句序列应该也会很大的影响执行速度。




-------------------------------------------------------------------------------------------
我迷醉着月光般的妩媚

发表于:2003-06-06 11:18:46
推荐:长期更新,从懂事到现在 ...第48楼...

阳光小虾
284 0

来自:广西
注册:2002-10-12
发帖:95+1220 
哪个大哥给小弟讲解一下

select top 1000 * from abc where 1=1 and id not in (select top 10000 id from abc where 1=1 order by id desc) order by id desc



这个语句是不是写错了?是不是top 11000才对,还有,where 1=1 有何作用?

两句的差别就是 前一句是 1=1 后一个是一个id in ...




-------------------------------------------------------------------------------------------
一只奋斗着的虾 拼搏着的虾

发表于:2003-06-06 13:41:31

回复主题 [ 返回ASP ]
主题: 我的关于分页的类
手机看宽带山

关于我们 - 联系我们 - 加入我们 - 营销服务 - 友情链接 - 频道合作- PChome Widget
Copyright © 1996-2009 PChome.net All rights reserved. 电脑之家 版权所有