bbs的樹狀結(jié)構(gòu)算法
發(fā)表時間:2024-02-18 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]數(shù)據(jù)庫設(shè)計中order_value是用來排序的,具體實現(xiàn)是 **注意以下的討論是對一個主題而言,就是對一棵樹而言! 如果加一新貼那么 order_value=0 如果跟貼查比父貼 order_value大的order_value 如果有假設(shè)為next_value,那么新帖的 ...
數(shù)據(jù)庫設(shè)計中order_value是用來排序的,具體實現(xiàn)是
**注意以下的討論是對一個主題而言,就是對一棵樹而言!
如果加一新貼那么 order_value=0
如果跟貼查比父貼 order_value大的order_value
如果有假設(shè)為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為兩者的一半!
排序?qū)崿F(xiàn): order by groupid,order_value desc
**技巧如果想實現(xiàn)層次多一點可以每次加的多一點+100000,那樣應(yīng)該會好一點
***不足之處:
1:使用兩個字段排序,速度有點慢
2:使用order_value是一個浮點數(shù),使用float估計不夠,還是使用double
3:只能實現(xiàn)理論上的無窮層實際上超過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