2011-06-06 94 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