| 网站首页 | | 网站简介 | | 公司新闻 | | 公司业务 | | 技术相关 | | 安全相关 | | 网络文章 | | 网站论坛 | | 典型案例 | | 客户留言 |  
 首页 >> 技术相关 >> ASP技术

bbs的树状结构算法


[日期:2005-9-3 22:24:59] [作者: 管理员] [字体大小:

数据库设计中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


 

    [阅读次数:145]
 [新闻出处:]
 上一条新闻: 不用Global.asa和session实现在线人数统计
 下一条新闻: asp中的一个奇怪的函数
相关新闻:
站 内 搜 索
请输入查询的字符串:

 
点 击 排 行
页 面 广 告
 
关于我们 | 联系方式 | 支付方式 | 站点统计
版权所有 DoILike.Com Ltd.,地址:山东省济南市舜耕路22号综合楼101室
电 话:13065088567 联系人:许老师 设计制作:DoILike.COM