2015-10-15 35 views
0

我有以下表中哪些用戶是指該用戶在該網站(簡化的例子)記錄的MySQL數最大的轉診線索在一個表中

| id |   user_id | friend_id | 
|-------|--------------------|--------------| 
| 1  |    1 |   2 | 
| 2  |    2 |   3 | 
| 3  |    3 |   4 | 
| 4  |    10 |   15 | 

我該怎麼做一種遞歸查詢制定出最長的推薦線索?

所以在上面的實例用戶1將有3轉診蹤跡,因爲他們提到的人,稱有人再提到他們所指的人別人......

這很容易變得非常複雜,但我只希望非常不規則地運行它。

它可能會更好地做它作爲一個PHP函數,但我努力讓我的頭在附近?

+0

如果用戶1引用了用戶2,而用戶2引用了3和4,那麼用戶1的引用路徑多長時間? 1或2?換句話說,這是否是鏈中重要人物的距離,或是一個分支下被轉介的人數? – Shadow

+0

您需要''foreach'內的'while',唯一的辦法就是使用php。無論如何,你的機器會非常緊張。 – phaberest

+0

@Shadow應始終從尚未被引用到該網站以避免分支的用戶開始 – Dan

回答

0

所以,基本上你想遍歷樹形圖並確定它們中哪一個是最長的。使用您存儲父級和子級ID的數據結構,您可以使用mysql中的存儲過程中的循環執行此操作。

你也可以從php做同樣的事情,但是,這將增加php和數據庫之間在每個循環中的通信開銷,所以我相信存儲過程實現更好。

This site給出瞭如何在mysql中實現和瀏覽圖的一個很好的概述。

您必須修改其中的ListReached()過程以返回行數而不是列表。你甚至可以把程序改成返回數字的函數。我也會改變創建表部分來創建臨時表。

然後使用max()來確定哪些是最長的路徑。

按照評論中的約定,只爲那些未被引用的用戶標識調用此函數。

相關問題