
 
 | 
| 技术资料  > ASP技术 > ASP应用 : bbs的树状结构算法 |  
bbs的树状结构算法 March 25,2004 |  
数据库设计中order_value是用来排序的,具体实现是    
**注意以下的讨论是对一个主题而言,就是对一棵树而言!    
如果加一新贴那么  order_value=0    
如果跟贴查比父贴  order_value大的order_value    
如果有假设为next_value,那么新帖的    
order_value为父贴的(order_value+next_value)/2;    
如果有那么新帖的order_value为父贴的order_value+1000    
也就是说如果对A贴跟贴,如果A为末贴,A的字帖的order_value为order_value(父)+1000,    
不是末贴既找出比A大的order_value,新的order_value为两者的一半!    
排序实现: order by groupid,order_value desc    
**技巧如果想实现层次多一点可以每次加的多一点+100000,那样应该会好一点    
 
***不足之处:    
1:使用两个字段排序,速度有点慢    
2:使用order_value是一个浮点数,使用float估计不够,还是使用double    
3:只能实现理论上的无穷层实际上超过10层使用float有问题,使用double可能没有    
4:插入是需要查找下一个order_value 
 
Dim ordervalue, nextvalue As Double 
sql = "select gorders where gId=" & gId & " and goders> " & gorders & " order by goders  " 
rs1.Open sql, conn1, adOpenForwardOnly, adLockOptimistic '查询比父贴大的 
                                                          order_value 
If (rs1.EOF And rs1.BOF) Then 
  gorders = gorders + 256 
  gLayer = gLayer + 1 
Else 
  nextvalue = rs1("gorders") 
  If (nextvalue - gorders) > 1 Then 
   gorders = Int((gorders + nextvalue) / 2) 
   gLayer = gLayer 
  Else 
     'gorders,glayer跟回帖一样 
End If 
End If 
 
End Sub 
         |  
 
 | 
  
Copyright © 2001-2008 Shenzhen Hiblue Software Team All rights reserved