2012-03-14 62 views
0

我想從一個給定的父母(和可選的他們的級別深度)檢索所有的孩子。另外,如果可能的話,我想在單個查詢或存儲過程中獲得它。從一個給定的父母在mysql中獲取所有的孩子

Mark Byers的this solution之類的東西,只能在相反的方向。

我的表結構是這樣的:

id  parent 
1  0 
2  1 
3  0 
4  1 
5  2 
6  5 
7  2 
8  4 

所以如果希望孩子1我會得到:

+2 
++5 
    +++6 
++7 
+4 
++8 

如果想爲2孩子我會得到:

++5 
    +++6 
++7 

如果想要4個孩子,我會得到:

+8 

在此先感謝!

編輯1:嵌套集模型沒有對我好

+0

其中rü從得到1,4?我的意思是這山坳烏爾指.. – Teja 2012-03-14 20:03:20

+0

@SOaddict這就是ID山坳 – 2013-05-10 20:30:13

+0

這個鏈接http://stackoverflow.com/questions/16391660/retrieve-hierarchy-from-a-table-like-this/16392049#16392049嘗試 – Meherzad 2013-05-10 20:35:30

回答

0

一個建議是溝壑鄰接模式和改變你的結構,一組嵌套。嵌套集非常適合快速選擇,並且不需要任何遞歸結構。然而它確實帶有價格,插入,更新和刪除更加痛苦。我前一陣子寫了一篇blog的文章,它基於MsSql,但很容易移植到MySql。谷歌也throws up一些很好的帖子。

另一個建議是加載數據庫中的所有行,然後在前端代碼中編寫遞歸方法並緩存輸出。如果我的表中只有幾百行,我使用這種方法。

+0

感謝的,但嵌套組是沒有好 – 2013-05-10 20:34:05

+1

在我看來,嵌套集合是一個貧窮的替代方法如果使用的DBMS不支持遞歸查詢是隻需要。 – 2013-05-10 21:13:43

+0

取決於很多因素,如果你真的與性能有關,你有一個大的記錄,然後IMO嵌套組手中奪了下來。它絕對不是一個糟糕的解決方法。 – Rippo 2013-05-11 09:27:27

-3

以下查詢會給大家在MySQL表中的子表。

給數據庫名和表名作爲參數

SELECT TABLE_NAME, 
     COLUMN_NAME, 
     CONSTRAINT_NAME, 
     REFERENCED_TABLE_NAME, 
     REFERENCED_COLUMN_NAME 
FROM 
     INFORMATION_SCHEMA.KEY_COLUMN_USAGE 
WHERE 
     REFERENCED_TABLE_SCHEMA = "database" 
AND REFERENCED_TABLE_NAME = "table"; 
相關問題