我有如下表:獲取頂級父的MySQL
id | parent_id | searchable | value
--------------------------------------------
1 | 0 | 0 | a
2 | 1 | 0 | b
3 | 2 | 1 | c
4 | 0 | 0 | d
5 | 4 | 1 | e
6 | 0 | 0 | f
7 | 6 | 0 | g
8 | 6 | 0 | h
9 | 0 | 1 | i
我需要提取所有的頂級記錄(所以那些在parent_id = 0
)。 但只有記錄中,其中父母或他的一個孩子是搜索(searchable = 1
)
因此,輸出應該是:
id | parent_id | searchable | value
--------------------------------------------
1 | 0 | 0 | a
4 | 0 | 0 | d
9 | 0 | 1 | i
因爲這些都是頂級的記錄,它的自我或他的一個孩子(無論這個可搜索的孩子有多'深')都是可搜索的。
我正在使用MySQL。我不確定是否有可能只用一個查詢來編寫它,但我認爲它應該用一段遞歸代碼或函數來完成。
**注意:樹的深度如何「未知」是未知的。
的可能重複[MySQL的 - 遞歸樹結構](http://stackoverflow.com/questions/2378678/mysql-recursing-a-tree-structure) – Mikpa
我讀過文章t帽子被標記爲正確的答案,但我沒有在那裏找到我的答案。對於我正在使用的應用程序,使用左右列的嵌套集模型效率不高 – JasperV
您需要更改數據模型,編寫存儲過程或在應用程序中執行遞歸。您沒有其他選項可以使用MySQL的有限功能。它可以**不能用單個查詢來完成,因爲MySQL缺乏執行遞歸查詢的能力 –