2011-06-02 52 views
0

我要創建從我的表中的記錄下面如何獲得在樹視圖記錄從MySQL/PHP的

id user_id friend_id property_id 
1 123  321   1 
2 123  456   1 
3 456  909   1 
4 909  222   1 

樹視圖我有USER_ID即123和PROPERTY_ID即1我需要知道如何我可以和朋友分享這個房產,然後與我的朋友分享這個ID的用戶建立一棵樹。

回答

1

好吧,因爲有幾個步驟我會從高層次開始。如果您需要任何幫助,請再詢問一次!首先,你需要「根」節點,即那些在朋友列中不作爲子女出現的用戶。

然後,對於這些用戶中的每一個,開始輪詢他們的所有子女。爲此,定義一個函數來獲取用戶的所有子項,併爲其發現的子項的子項遞歸調用自身。

這很抽象,因爲問題就是你想要用這個結構做什麼。這取決於最後一部分,您的表示層。那是我最不瞭解的;可能有一個框架可以幫助你在PHP中可視化樹,但我不知道。通常會有某種具有佈局屬性和子對象的對象結構;從最後一步實例化遞歸函數中的那些屬性。

作爲一個側面節點,不清楚你獲得的數據結構是否實際上是一棵樹。如果你是A,有朋友B和C,C也是B的朋友,B會出現在你的朋友(在樹的第2層)和C的朋友(在第3層)。你必須檢查那個地方你想要的行爲,並且可能必須(例如)第二次忽略C。

+0

是的我通過遞歸函數得到它,但這不是我喜歡做的。我在想,我只傳遞根節點id(user_id)和property_id,它返回一個數組形式的樹?可能嗎? – 2011-06-04 22:30:12

+0

例如,您可以將樹表示爲數組,請參閱Heap的數組表示形式。您也可以使用堆棧將任何遞歸函數重寫爲非遞歸函數(因爲遞歸函數調用基本上只是堆棧操作中的語法糖)。兩者都可能增加您的代碼的複雜性。 – Nicolas78 2011-06-06 11:20:27

+0

但是。如果你只想去兩個級別(你的朋友,他們的朋友),你可能會做得很好,只是創建一個返回兒童直接列表的函數。然後,仔細查看所有這些孩子,然後再次打電話給朋友的朋友。既然你對更深的層次不感興趣,那實際上聽起來像是個好主意。你用這種方法卡住了那裏? – Nicolas78 2011-06-06 11:22:38