bbs的树状结构算法

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

'引用自http://www.jscode.cn/arthtml/art4478.htm


文章来自: 本站原创
引用通告地址: http://www.is21.cn/trackback.asp?tbID=678
Tags:
评论: 0 | 引用: 0 | 查看次数: 1475
发表评论
你没有权限发表留言!