安大互联
财经热点 > Asp编程 > 使用多中值排序基数实现大型树状结构
使用多中值排序基数实现大型树状结构
浏览次数:【238】  发布日期:2009-8-13 12:09:22    文章分类:Asp编程   
专题:】 【
 
使用多中值排序基数实现大型树状结构

    在“中值排序基数法实现树状结构”中,为了解决回复限制的问题,我们可以增加第贰(三、四……)基数字段。
    其实在一般的BBS中,使用一个基数已经足够,因为一个贴子的回应太多或深度太大的时候,不管你的树状结构做得多好,由于屏幕的约束(显示折行),显示总会乱,因此不如象在《补充》一文中,达到一定深度或个数时,后面的贴子采用平行显示的要领,不过那部分已经不再是树状结构了。
    原理:在贴子显示的order by子句中,如果排序基数相同,则根据第贰基数排序,从而避免树状结构限制。

一、在BBS的内容表中再增加一个第贰基数字段ordernumS,同第壹基数一样,可为int或numeric,看需要定。

这样在表中增加了四个冗余字段,rootid——用于记录根id,deep——用于记录回复的深度(为0时表示根贴),ordernum——第壹排序基数,ordernumS——第贰排序基数

表forum与(只列与树状结构相关的字段):
id   rootid   deep    ordernum  ordernumS
其中id、rootid、deep均为int型(deep可为tinyint型),ordernum为int或float型,ordernumS(默认值为0)同ordernum。

例:(在此为了简单,使用一个小的起始排序基数,且为int型,以清楚观察啥时候第贰排序基数起作用)。
(下面所说的排序均指按ordernum从小到大,ordernumS从小到大排序,即order by ordernum,ordernumS)
(下面所说的精度为后贴与前贴的ordernum的差,精度标记指的是这个差大于某个值这个条件,好比(后贴的ordernum-前贴的ordernum)>1)

id   rootid    deep    ordernum  ordernumS
1      0        0            0      0
2      1        1            8      0
_____________________________________
3      1        1            4      0  回复第1贴,第壹基数取1、2贴的第壹基数中值即(0+8)/2=4

排序后结果为:
id   rootid    deep    ordernum  ordernumS
1      0        0            0      0
3      1        1            4      0
2      1        1            8      0
_____________________________________
4      1        2            6      0  回复第3贴,第壹基数取3、2的第壹基数中值即(4+8)/2

排序后结果为:
id   rootid    deep    ordernum  ordernumS
1      0        0            0      0
3      1        1            4      0
4      1        2            6      0
2      1        1            8      0
_____________________________________
5      1        3            7      0    回复第4贴,第壹基数取4、2的第壹基数中值即(6+8)/2

排序后的结果为:
id   rootid    deep    ordernum  ordernumS
1      0        0            0      0
3      1        1            4      0
4      1        2            6      0
5      1       &

手机扫码浏览该文章
 ● 相关资讯专题
  • 网络建设业务咨询

   TEl:13626712526