2011-04-01 72 views
1
I have a table: 
id name 
1 home 
2 menu 
3 contact 

second table: 
id name menu_id 
1 menu1 2 
2 menu2 2 
3 menu3 2 

and I need this output: 
1 home 
2 menu 
    1 menu1 2 
    2 menu2 2 
    3 menu3 2 
3 contact 

我试过这个联盟但我失败了。 有人知道在这里使用什么查询? 谢谢!mysql难以查询的联盟

+0

你需要以嵌套的方式的菜单项?像嵌套的gridview或什么的? – Remy 2011-04-01 11:24:57

回答

2
select t1.id, t2.id, t1.name, t2.name 
    from t1 
    left join t2 on t2.menu_id = t1.id 
order by t1.id, t2.id; 

好吧,如果你想有一个数据集就像你贴一个,这里是查询做到这一点:

select case 
     when t1Id < 0 then null 
     else t1Id 
     end as t1Id, nullif(t2Id, 0) as t2Id, t1Name, t2Name 
    from (
    select id as t1Id, 0 as t2Id, name as t1Name, null as t2Name 
     from t1 
     union 
    select -menu_id as t1Id, id as t2Id, null as t1Name, name as t2Name 
     from t2 
    ) allTables 
    order by abs(allTables.t1Id), abs(allTables.t1Id) * 100 + allTables.t2Id; 
+0

感谢这与我所得到的一样,但它需要是联合查询。这就是我的同事告诉我的,我不知道为什么 – Ruben 2011-04-01 11:21:16

+0

我编辑了这个查询来显示你想要的方式。我假设每个菜单选项的子菜单不超过100个。如果有:)则在'order by'子句中增加100 – 2011-04-01 11:43:53