閱讀557 返回首頁    go 阿裏雲 go 技術社區[雲棲]


無限分類法

 

另一種的無限分類法

 

 

MYSQL中,數據表大致上是

CREATE TABLE Table_Types

(

 id INTEGER NOT NULL AUTO_INCREMENT,

 parent_id INTEGER,

 node VARCHAR(255),

 PRIMARY KEY (id)

)

 

 

<img src="https://res.3425.com.cn/aliyunqi/uanol3pvjrd.jpg">

如上圖,紫色的是數據記錄的ID號,框內的數字是每條記錄的node字段,記錄了該記錄的父ID和父ID的父ID...

這樣,假如我們要在ID7的記錄下,插入一條新ID13的記錄,新記錄的node就是1,2,7,13

要找一個節點下的所有子節點,就無需用遞歸,隻要一個SQL

如“查ID2記錄下所有子節點”

select * from Table_Types where node like "1,2,%"

大家探討一下,該算法的有效性和不足!

上次看到的左右值的算法,雖然在搜索方麵很不錯,但是如果是插入頻繁的應用,性能就很差了,因為每次插入新節點都需要update該父節點以下的所有記錄。的右值。而上麵這個算法,對插入操作尤其簡單,隻要找到父ID的根下來就可以了。搜索方麵好像也還不錯,都是避免了遞歸。

 

最後更新:2017-04-02 00:06:45

  上一篇:go 用CSS/Javascript來判斷瀏覽器類型
  下一篇:go 不要重複發明輪子:C++重用的5重境界(1)——代碼重用