bbs的树状结构算法

王朝网络·other·作者佚名  2006-11-24
宽屏版  字体: |||超大  

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有