紧急求助:如何提高我的运行速度

makeup 2003-12-18 07:15:24
小弟现在在做一个asp,得读一个access数据库
库里面三个表,比如A,B,C
实际上最终结果就是这样的
_____________________________
b1 b2 b3 ... bn
a1 c11 c12 c13 c1n
a2 c21 c22 c23 c2n
a3 c31 c32 c33 c3n
.
.
am cm1 cm2 cm3 cmn
_____________________________
这样一张二维表


但是表A(a1,a2...am)中的记录条数是可伸缩的_
表B(b1,b2,..bn)中的也一样
C中的表记录是这样组成的:行号、列号、数据
所以第m行第n列数据并不一定存在于表C中
现在的情况是我必须把这样的二维表画出来
行名、列名、以及各行各列对应的数据
如果对应的数据不存在,就写上*号
——————————————————————?
我的程序是这样写的:
1)得到A的记录个数,也就是行数a_len
2)得到B的记录个数,也就是列数b_len
3)从11写到mn
for i=1 to a_len
for j=1 to b_len
rs=db.execute(select * from c where hanghao=i and liehao=j)
if not rs.eof then
写cij
else
写*
end if
next
next


但是表A(a1,a2...am)中的记录条数是可伸缩的_
表B(b1,b2,..bn)中的也一样
C中的表记录是这样组成的:行号、列号、数据
所以第m行第n列数据并不一定存在于表C中
现在的情况是我必须把这样的二维表画出来
行名、列名、以及各行各列对应的数据
如果对应的数据不存在,就写上*号
——————————————————————?
我的程序是这样写的:
1)得到A的记录个数,也就是行数a_len
2)得到B的记录个数,也就是列数b_len
3)从11写到mn
for i=1 to a_len
for j=1 to b_len
rs=db.execute(select * from c where hanghao=i and liehao=j)
if not rs.eof then
写cij
else
写*
end if
next
next


当行数和列数都很大的时候,速度相当慢,加上asp生成页面的时间
差不多要半分钟
请问我的算法怎样可以改进啊
————————————————————————
多谢各位的帮助!
...全文
30 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
makeup 2003-12-18
  • 打赏
  • 举报
回复
而且刚才我发现现在C中的结构根本不是我说的那回事儿
是这样的,C的关键字是一个序号组成是象060711这样的形式
其中06是大类型,我在一个页面里面要且仅要一种大类型的所有记录
07,是列号
11,是行号
现在我发现问题来了,不能order by行号、列号这个不存在的字段!
但是如果我order by 编号 的话,它的列号是在前面的!!!
简直ft
oldmht 2003-12-18
  • 打赏
  • 举报
回复
对阿
读这此读出来的数据的行号和上次读出来的不一样说明换行了
换行了的话,就判断上次那一行少了多少列,少了多少就打印
多少个*
如果你是c中不一定是每行的最后才缺少数据的话,就要一起
判断列数据了,如果有跳动,则要相应补上多少个*,这个就
麻烦一点
具体程序你自己想想吧,反正值要不select太多次,都是很
快的
makeup 2003-12-18
  • 打赏
  • 举报
回复
我们的当然都不能出来结果,因为我说的是算法
说老实话,我到现在还没弄太清楚你的算法
我是拿数组验证了一下你的,结果不太对
为什么要
for i=tL to b_len-1
写 *
next
写那么多*呢?
你能给我讲讲你的思路吗?(我太笨了,呵呵)
你给我的启示就是,先读出所有的纪录,当然很关键是order by
然后再输出,而不是我最初的每个记录都select 一次
oldmht 2003-12-18
  • 打赏
  • 举报
回复
你写的应该可以阿,运行一下咯,其中有一个endif应该是end if吧
oldmht 2003-12-18
  • 打赏
  • 举报
回复
能出结果阿,呵呵,我还以为会页面错呢
把你需要的结果和我那个的结果列出来,看看有什么区别阿
makeup 2003-12-18
  • 打赏
  • 举报
回复
在asp里面肯定得一行一行的输出吧
我的想法是这样的:
set rs=db.execute("select hanghao,liehao,value from C order by hanghao,liehao")
while not rs.eof
for i=1 to hangshu
response.write("<tr>")
for j=1 to lieshu
if rs("hanghao")=i && rs("lieshu")=j
response.write("<td>"&rs("value")&"</td>")
rs.movenext
else
response.write("<td>*</td>")
endif
next
response.write("</tr>")
next
wend
这样是不是还是不理想?
_______________________________
oldmht(鸭子)的想法给了我很大的启发
但是我试验了一下,好想结果不太对
先谢谢你
希望能给我更多的帮助
oldmht 2003-12-18
  • 打赏
  • 举报
回复
dim tH,tL,i
tH=1
rs=db.execute(select * from c order by liehao,hanghao)
while not rs.eof

if (rs("hanghao")<>tH)
for i=tL to b_len-1
写 *
next
tH=rs("hanghao")
end if

写 cij
tL=rs("liehao")
rs.movenext
wend
makeup 2003-12-18
  • 打赏
  • 举报
回复
小弟现在在做一个asp,得读一个access数据库
库里面三个表,比如A,B,C
实际上最终结果就是这样的
_____________________________
b1 b2 b3 ... bn
a1 c11 c12 c13 c1n
a2 c21 c22 c23 c2n
a3 c31 c32 c33 c3n
.
.
am cm1 cm2 cm3 cmn
_____________________________
这样一张二维表


但是表A(a1,a2...am)中的记录条数是可伸缩的_
表B(b1,b2,..bn)中的也一样
C中的表记录是这样组成的:行号、列号、数据
所以第m行第n列数据并不一定存在于表C中
现在的情况是我必须把这样的二维表画出来
行名、列名、以及各行各列对应的数据
如果对应的数据不存在,就写上*号
——————————————————————?
我的程序是这样写的:
1)得到A的记录个数,也就是行数a_len
2)得到B的记录个数,也就是列数b_len
3)从11写到mn
for i=1 to a_len
for j=1 to b_len
rs=db.execute(select * from c where hanghao=i and liehao=j)
if not rs.eof then
写cij
else
写*
end if
next
next

当行数和列数都很大的时候,速度相当慢,加上asp生成页面的时间
差不多要半分钟
请问我的算法怎样可以改进啊
————————————————————————
多谢各位的帮助!

28,404

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧