例如,代理級別分:金、銀、銅三級,我現在是金牌代理A,同時我發展了銀牌代理B、C、D,銀牌代理b發展了銅牌代理E、F,如圖:
A的下級代理清單
╦═══════
║
╠═ b
║ ╠══ e
║ ╜␕上面這樣一張例圖方法是:(PHP+MYSQL)
先搜尋所有上級代理為A的代理,
例如找到了B代理,再搜尋所有上級代理為B的代理,本次搜尋完畢。
再搜尋C代理 …………
以此類推。
問題:
我想到的解決辦法是用一個數組存儲所有用戶關係,然後將這個數組存儲為文件,對每次添加刪除用戶都對這個數組同時進行更新操作,然後把想要的數據從數組遍歷出來,然後直接到資料庫中執行一個select就可以了。 。這種辦法可行麼,還有什麼其他解決方案麼
遍歷
回覆內容:
一個關於代理分銷系統的演算法最佳化問題║
╠═ b
║ ╠══ e
║ ╎上面這樣一張例圖方法是:(PHP+MYSQL)
先搜尋所有上級代理為A的代理,
例如找到了B代理,再搜尋所有上級代理為B的代理,本次搜尋完畢。
再搜尋C代理 …………
以此類推。
問題:
現在代理資料庫中有三十萬筆記錄,每個代理程式都可以在代理分銷系統中查看自己的下級代理樹,按照以上方法:
每次搜尋都要很久,如果某個代理的下級代理有1000個,那就根本顯示不出來。
遍歷
先檢查代理級別建索引了沒。
整個樹顯示出來一個頁面也不合適吧,可以做成按需查詢。
金牌代理打開頁面顯示下級的所有銀牌代理,點擊銀牌代理用戶再查看他下級的銅牌代理
謝邀,說說我的幾個思路吧:
快取
(資料量30萬,估計只能快取1~2級了),不用每次用SQL查詢。
多次加載,這個樓上也說了,先加載N級
的,等點擊後,再ajax去請求
樹結構 無限極分類
自己搜尋具體答案吧,這個講細了很麻煩,大致原理說一下給你。
怎麼才能最快的知道誰是自己的下級呢?如果大家來站隊的話,滿足兩個條件即可,1- 你知道誰是第一個,2-保證自己是最後一個(當然也可以知道誰是最後一個,保證自己是第一個)
根據這個推論為每個節點編上一個合適的序號即可實現快速查找,如select * from tree where indexNumber >= search.node.min && indexNumber
最終的表結構類似
id, parent_id(父節點), top_id(根節點,如果有多個樹的時候), indexNumber(樹內的索引編號,top_id+indexNumber是唯一的), min(已我為基準,誰是本分支下的第一個), level(樹高)
對於你的例子應該類似 (括號內第一個數字是索引號,第二個是min,第三個是樹高)
<code> a(6,1,0) b(3,1,1) c(4,4,1) d(5,5,1) e(1,1,2) f(2,2,2)</code>
這個結構在節點操作的時候較複雜(比如你在f後面加個g,或者刪掉f,那麼abcd都需要重新計算序號),但是搜索就非常快了,一般一次搜索就能出結果啦。