使用多中值排序基數實現大型樹狀結構

來源:互聯網
上載者:User
排序 使用多中值排序基數實現大型樹狀結構

    在“中值排序基數法實現樹狀結構”中,為瞭解決回複限制的問題,我們可以增加第二(三、四……)基數欄位。
    其實在一般的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       &



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。