2017-03-07 206 views
0

在我的项目查询我配置的菜单如下图所示如何避免循环

Menu Group Id Menu ID Parent Menu Id Menulevel  Name    Action GroupName 
     1   1    1   1  Home    a.htm  mainuser 
     2   2    1   1  Report    b.htm  mainuser 
     3   3    1   2  Customer    c.htm  mainuser 
     4   4    2   2  Merchant    d.htm  mainuser 
     5   5    1   2  Corporate    e.htm  mainuser 

我想从上表

{ 
    "menuname" : "home", 
    "action" : " a.htm, 
    "hasChild" : " true , 
    "childlist" : [ 
    { 
    "menuname" : "Customer", 
    "action" : "c.htm", 
    "hasChild" : "false", 
    }, 

    { 
    "menuname" : "Corporate", 
    "action" : "e.htm", 
    "hasChild" : "false", 
    } 
    ] 
    } 

产生以下JSON来genrate上述JSON第一我正在取父菜单的然后我循环使用该父母的ID每个父菜单获取子菜单。

select * from menugroup where GroupName='mainuser' and Menulevel=1 
     for each parent menu 
     select * from menugroup where GroupName='mainuser' and Precedence=1 

是他们的任何方式,以避免第二个查询? 任何帮助将不胜感激!

回答

0

你很可能有connect by截至去:

select * from menugroup 
start with menu_group_id = parent_group_id 
connect by prior menu_group_id = parent_group_id and prior menu_group_id != menu_group_id 
where groupname = 'mainuser'. 

这会满足你的数据作为一个层次,并会解决需要一个嵌套循环。

+0

它只返回父菜单而不是子菜单 – Madhesh