2011-06-06 84 views
0

我有一個表在以下幾列我的MySQL數據庫:遞歸MySql視圖:這可能嗎?

- id 
- parent_id 
- visible 

基本上如果我有一個填充像這樣:

id  name  parent_id  visible 
    ------ --------- -------------- ------- 
    1  Admin  0    1 
    2  Review 0    0 
    3  Archive 2    1 
    4  Support 0    1 

雖然層次是...

1 - Admin 
2 - Review 
    3 - Archive 
4 - Support 

我想歸檔(3)基本上從它的父行繼承'可見'屬性 - 審查(2)。我想在視圖這樣返回此:

id  name  parent_id  visible 
    ------ --------- -------------- ------- 
    1  Admin  0    1 
    2  Review 0    0 
    3  Archive 2    0 
    4  Support 0    1 

有誰知道這是否可能在MySQL而不是訴諸存儲過程?

謝謝!

回答

0

你可以在一個正常的查詢使用CASE語句可見的列做到這一點:

select a.id, a.name, a.parent_id, 
     CASE WHEN a.parent_id = 0 
     then a.visible 
     else b.visible 
     end as visible 
from myTable a 
left join myTable b on a.parent_id = b.id 

你也可以創建視圖(相同的代碼):

create view myTableView as 
select a.id, a.name, a.parent_id, 
     CASE WHEN a.parent_id = 0 
     then a.visible 
     else b.visible 
     end as visible 
from myTable a 
left join myTable b on a.parent_id = b.id 
+0

感謝您的幫助, Fosco。我腦部凍結完全。 – Brian 2011-06-07 10:39:54