作者LaPass (LaPass)
看板Database
標題[SQL ] 樹狀結構的SQL怎麼下?
時間Fri May 4 11:01:31 2012
在程式中
很常用到像是「樹」這種東西
例如資料夾(d:我的資料夾/相片/日本旅遊)
部門單位(頂尖大學/理學院/資訊工程研究所)
地址(地球/台灣/台北/中和路一百號)
我看到的用法
大多是用一個欄位叫做ParentId,紀錄上一層是什麼
像是
#1BOeU8K1 那篇文中那樣
那,我想請問
如果要針對一棵「樹」下指令該怎麼做?
例如把樹中所有的Name欄位改成'樹A'
UPDATE Tablea SET Name='樹A' WHERE.....
之類的
之前看過有人額外加Folder欄位去紀錄階層
EX: _0_2_3_42_5_ 中間的數字是從根部到該資料夾的id
如果想找id為42的資料夾下的所有檔案,就用 Folder LIKE '%_42_%' 下去找
也看過有人寫遞迴去撈資料
但是,目前我想弄的東西,可能會製造一棵層次達到幾十、幾百,甚至幾千的樹
而且結點可能會移動
不管用遞迴或是額外加欄位似乎都不太理想
請問有漂亮的方法可以解決這個問題嗎?
--
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.59.16.65
推 allanshen:試試 Modified Preorder Tree Traversal 05/04 12:43
→ LaPass:這個嗎? 05/04 12:51
→ LaPass:這個方法在新增、刪除時似乎需要動到很多筆資料,以及多執 05/04 12:54
→ LaPass:行緒時似乎會出狀況.... 不過那方法讓我想到了,在伺服器起 05/04 12:55
→ LaPass:動時把ID讀出來建成樹,放在記憶體裡做快取就好了 XD 05/04 12:56