2013-06-12 56 views
0

我有这样的MySQL查询:如何检索树节点计数mysql中的所有记录?

`select a.ID, a.parentID, a.name, 
count(distinct b.ID) as level1, 
count(distinct c.ID) as level2, 
count(distinct d.ID) as level3, 
count(distinct e.ID) as level4, 
count(distinct f.ID) as level5, 
count(distinct g.ID) as level6, 
count(distinct h.ID) as level7, 
count(distinct i.ID) as level8, 
count(distinct j.ID) as level9, 
count(distinct k.ID) as level10 
from members a 
left join members b on b.parentID = a.ID 
left join members c on c.parentID = b.ID 
left join members d on d.parentID = c.ID 
left join members e on e.parentID = d.ID 
left join members f on f.parentID = e.ID 
left join members g on g.parentID = f.ID 
left join members h on h.parentID = g.ID 
left join members i on i.parentID = h.ID 
left join members j on j.parentID = i.ID 
left join members k on k.parentID = j.ID 
left join members l on l.parentID = k.ID 
where a.ID = 1` 

如何我一定要更新此查询,以便让所有的ID在成员表,不只是在检索时1个查询结果。 我想每样东西取代,其中a.ID = 1:

`where a.id IN (select ID from members)` 

的问题是,当我这样做,我得到的只是一排用分组的所有罪名。我想获得ID列表中的关卡列表。

结果是这样的:

`ID | parent | name  | lv1 | lv2 | lv3 | lb4 | lv5 | lv6 | lv7 | lv8 | lv9 | lv10 |` 
`1 | 0  | Manish Shah | 3 | 9 | 27 | 81 | 36 | 0 | 0 | 0 | 0 | 0 |` 

而且我想

`ID | parent | name  | lv1 | lv2 | lv3 | lb4 | lv5 | lv6 | lv7 | lv8 | lv9 | lv10 |` 
`1 | 0  | Manish Shah | 3 | 9 | 27 | 81 | 36 | 0 | 0 | 0 | 0 | 0 |` 
`2 | 4  | luiset Shah | 3 | 9 | 27 | 81 | 36 | 0 | 0 | 0 | 0 | 0 |` 
`3 | 8  | sarah kanna | 3 | 9 | 27 | 81 | 36 | 0 | 0 | 0 | 0 | 0 |` 

等等...

回答

1

你需要将你的数据,即

WHERE a.id IN (2341,2342,2343,2344) 
GROUP BY a.id 
+0

Heyyyy非常感谢!有效!!你摇滚! –

+0

还有一个名为introID的额外字段,它是引入该程序的另一个成员的成员的ID,因此,如何获得每个级别的introID总数? –

+0

@LuisParada有什么区别?我的意思是,你可以在任何领域做DISTINCT ...如果它是一个不同的领域,那么请在另一个问题中提出。 – sashkello

0

如果你想要所有的成员,你可以删除WHERE条款,但您​​将需要一个GROUP BY a.ID

相关问题