2016-04-23 58 views
4

以下是我在我的MySQL數據庫表:使用特定根從SQL表中獲取最新分支的最有效方法是什麼?

id | parent | name 
---------------------- 
1 | null | Root 1 
3 | null | Root 3 
6 | 3  | something 1 
7 | 6  | something 2 
9 | 1  | something 3 

我想獲得最新的分支出來的表。現在我只是檢查最高id並按照代碼中的項目。

在我的情況下,我可以假設最新的條目始終是分支的尖端,而不是分支或根的中間。

我遇到的問題是獲取最新的特定根。假設我想要根3的最新分支。我會怎麼做?

有沒有一種方法,我可以在SQL中查詢這個,而不必在PHP中進行遞歸循環,直到我找到我需要的東西?

改變樹存儲在SQL中的方式目前不是一個選項。 :(

+0

http://stackoverflow.com/questions/12796113/mysql-how-to-找到特定節點中的節點 這可能會解決你的問題 – Naruto

+1

不是真的,沒有。如您所建議的那樣,更改您的數據模型或編寫一個存儲過程,或將表加入自己,或者使用應用程序級代碼來處理遞歸。 – Strawberry

回答

1

我的建議與該特定節點的完整路徑添加新列:

id | parent | name   | path 
----------------------------------- 
1 | null | Root 1  | 0|1 
3 | null | Root 3  | 0|3 
6 | 3  | something 1 | 0|3|6 
7 | 6  | something 2 | 0|3|6|7 
9 | 1  | something 3 | 0|1|9 

這不會改變現有的數據,只會擴大它這種方法比簡單的遞歸或存儲在計算時間的程序。當你需要最新的分支3,你會做到這一點,並直接獲取最新的節點:

SELECT id FROM table where path like "0|3%" 
ORDER BY path DESC LIMIT 1 
相關問題