關於類別樹的多級是乙個剛接觸ajax和多級類別很頭痛的問題,針對那種商品種類繁多,級別層次多更是麻煩的問題,去年剛學asp.net,實驗室的同學曾經這樣做過,遞迴sql,現在看了驚心動魄
雖然實現了類別多級的問題這樣帶來的後果確實無窮無盡的.............
遞迴查詢,和雙迴圈巢狀的執行sql語句沒什麼區別了......
這樣帶來的是嚴重的效能問題..
現在重新做這些東西,我想到了2個方案,第乙個:
針對資料比較少的多級選單,我們可以通過資料庫一次查詢出來所有記錄,然後通過程式進行遞迴演算法,進行資料的轉化.
第二種:
就是資料庫設計的時候,設計成多級別的選單,每次載入通過ajax,一點一點展開(每一次展開都ajax請求下一級的資料),這樣避免的遞迴帶來的效能損失,而且實現簡單方便,非常適合大資料量的時候,但是,一次只能顯示一級,每次都要ajax請求下一級.
由於後台管理,第一次就按照第一種方案來設計:
首先,要設計好資料庫,方便以後兩種方式擴充套件,
這樣設計,主要是考慮方便前台後台的擴充套件,fid欄位是乙個為了方便前台查詢而設計的,這樣設計的好處就是如果查詢比如頂級選單下的所有產品,只需要根據模糊查詢字首匹配,就能把所有的產品都查詢出來,設計的字段還是有點小,isleaf是為了判斷是否是葉子節點,belongsid父級id,
前台**:
**如下:
這乙個難點在於json資料遞迴生成:
bll中獲得tree的json資料
複製**
**如下:
///
/// 工藝品類別樹轉化為json格式
///
///
public string crafttypetreetojson()
,內容
} }
sb.remove(sb.length - 1, 1); //去除掉最後乙個多餘的,
return common.formattojson.miniuitojsonfortree(sb.tostring(), "工藝品類別");
} ///
/// 遞迴獲得父級id下的所有類別json資料
///
/// json字串
/// 父級id
/// 類別資訊集合
public void getleaftree(ref stringbuilder sb,int parentid,ienumerablecrafttypelist)
,內容
} }
sb.remove(sb.length - 1, 1); //去除掉最後乙個多餘的,
} 效果圖如下:
雖然是ajax實現,不過這個確實ajax一次性把資料全部載入進去,這樣對效能有嚴重的損失,不過考慮是後台,所以,沒做處理,不過最好還是用第二種方法設計,那種方法是最好的解決方法,也適合前台的資料展示.
第二種方法正在實踐中………
Java遞迴生成樹
注意 根節點的pid 0,其他節點的pid跟id是有對應的父子關係的。這裡只展示遞迴生成樹的 查詢資料庫的操作非常簡單,只用到了一句sql,然後將結果封裝成list。select id,pid,name from t menu service override public list tree 遞迴...
JAVA遞迴生成許可權樹
遞迴生成乙個許可權樹,可通過以下過程實現 每條許可權有自己的id 父節點parentid 許可權名稱name 許可權還擁有次級許可權children。許可權表 create table module id int 10 not null auto increment comment 模組id par...
次小生成樹Tree
小c最近學了很多最小生成樹的演算法,prim演算法 kurskal演算法 消圈演算法等等。正當小c洋洋得意之時,小p又來潑小c冷水了。小p說,讓小c求出乙個無向圖的次小生成樹,而且這個次小生成樹還得是嚴格次小的,也就是說 如果最小生成樹選擇的邊集是em,嚴格次小生成樹選擇的邊集是es,那麼需要滿足 ...