首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > ASP >

6万多条数据,删除符合条件,并上下衔接(高难度,附代码,高手指教一、二),该怎么处理

2012-02-05 
6万多条数据,删除符合条件,并上下衔接(高难度,附代码,高手指教一、二)每个人下面左、右两边衔接了2个人,分别

6万多条数据,删除符合条件,并上下衔接(高难度,附代码,高手指教一、二)
每个人下面左、右两边衔接了2个人,分别为LeftNumber、RightNumber。程爆炸性增长。现在整个网络里有一些人不符合条件ispayok=0,必须删除。HyParentNumber就是LeftNumber、RightNumber的接点人,程三角形式显示。
SQL   总数据达到6万5千条,需要吧不符合条件的删除,而且要吧整个网络衔接起来。现在无法删除,进度条到达38%的时候,差不多一个小时不动了。
那位高手能帮忙看看吗?感激不尽............


<%
set   HyExcelRs=nothing
set   HyExcelRs=server.CreateObject( "adodb.recordset ")
sql   =   "SELECT   HyID,HyNumber,LeftNumber,RightNumber   FROM   HyClub   where   ispayok=0     order   by   ID "
HyExcelRs.Open   sql,conn,1,1
if   HyExcelRs.RecordCount> 0   then
while   (not   HyExcelRs.eof)
HyNumber=HyExcelRs( "HyNumber ")
LeftNumber=HyExcelRs( "LeftNumber ")
RightNumber=HyExcelRs( "RightNumber ")
HyID=HyExcelRs( "HyID ")

if   LeftNumber= "0 "   or   RightNumber= "0 "   then
ChildNumber= "0 "
if   LeftNumber <> "0 "   then
ChildNumber=LeftNumber
end   if
if   RightNumber <> "0 "   then
ChildNumber=RightNumber
end   if

set   Temprs=nothing
set   Temprs=server.CreateObject( "adodb.recordset ")
sql   =   "select   *   from   hyClub   where   HyNumber   in   (select   HyParentNumber   from   hyClub   where   Hyid   =   "   &   HyID   &   ") "
Temprs.Open   sql,conn
kk=Temprs.recordcount
if   kk> 0   then
ParentID=Temprs( "ID ")
ParentNumber=Temprs( "HyNumber ")
if   Temprs( "LeftNumber ")=HyNumber   then
strsql= "update   HyClub   set   LeftNumber= ' "&ChildNumber& " '   where   ID= "   &   ParentID
else
strsql= "update   HyClub   set   RightNumber= ' "&ChildNumber& " '   where   ID= "   &   ParentID
end   if
set   rs1=server.CreateObject( "adodb.recordset ")
response.write   strsql& " <br> "
rs1.Open   strsql,conn

strsql= "update   HyClub   set   HyParentNumber= ' "&ParentNumber& " '   where   HyNumber= ' "   &   ChildNumber   & " ' "
set   rs1=nothing
set   rs1=server.CreateObject( "adodb.recordset ")
rs1.Open   strsql,conn
'response.write   strsql& " <br> "
end   if

set   rs=nothing
set   rs=server.CreateObject( "adodb.recordset ")
sql   =   "delete   from   hy   where   id   =   "   &   HyID
rs.Open   sql,conn
set   rs=nothing

set   rs=server.CreateObject( "adodb.recordset ")
sql   =   "delete   from   hyClub   where   Hyid   =   "   &   HyID
rs.Open   sql,conn
end   if

HyExcelRs.movenext
wend
end   if
%>

[解决办法]
把我的思路写一下
如果是在sql server中折腾的话


1。声名游标1,用于检索不符合条件的行where ispayok=0
2。打开游标对每一条记录进行处理
while fetch_status=0
begin
如果存在左右

end
[解决办法]
不好意思,上面的帖子是发错了

还是设计一个函数吧

嵌套删除
[解决办法]
"select * from hyClub where HyNumber in (select HyParentNumber from hyClub where Hyid = " & HyID & ") "


这种写法运算量极大! 绝对不要用 in
[解决办法]
实现这样的功能并不复杂,关键是你设计这个会员管理系统的时候是如何设计的
上周才交了一个项目,也是做的这种会员管理系统,我们是做成树状形式的,删除后自动排列到前面即可。
[解决办法]
首先
程序死在那里,很可能有死循环(认了爷爷做儿子),很差的机子 几万条数据是不用一分钟的。

那你还得想法搞定这死循环,再删,

由上往下删是最快的,不过要接上个数组,或数据库,边记边删。(还有,你的机太老土,内存不大勿试)


A
/ \
AA AB
/ \ / \
AAA AAB ABA ABB


查 AA 死了, 好,记下AA AAA AAB
...............
一次以后,记下不少死掉的了,

再来一次,左边的补上,左边的也死了,右边的补上,右边的也死了,下下级。


牛吹大了,前面是对的,后面我扯远了,呵呵.............
[解决办法]
删除了HyParentNumber以后,他的下属节点归谁呢?这个需要先解决啊.以前一个项目我也用类似的结构模拟文件系统.我的思路是将所有纪录度到一二维数组或自定义结构数组中,然后通过递归找出需要删除的纪录id并保存到一字符串中(格式为:id1,id2,id3...).最后执行sql delete from <tablename> where id in ( " & stridsum & ") ".这种递归结构直接用数据库可能不行,会把数据库累死的.

热点排行