0

私はこの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`

一度に 1 つのクエリ結果を取得するだけでなく、メンバー テーブル内のすべての ID を取得できるようにするには、このクエリをどのように更新する必要がありますか。where a.ID = 1 を次のように置き換えたいと思います。

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

問題は、これを行うと、すべてのカウントがグループ化された 1 つの行しか得られないことです。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    |`

等々...

4

2 に答える 2

1

データをグループ化する必要があります。つまり、

WHERE a.id IN (2341,2342,2343,2344)
GROUP BY a.id
于 2013-06-12T01:07:09.697 に答える